Ответ 1
Гибкая обработка переадресации теперь находится в Alamofire благодаря другому запросу на перенос и доступна с помощью Alamofire 1.2.0
.
Я пытаюсь настроить Alamofire на переадресацию (или нет) на основе запроса.
Alamofire имеет закрытый внутренний класс SessionDelegate
, который служит для NSURLSessionTaskDelegate
для текущего сеанса URL. SessionDelegate
реализует соответствующий метод делегата URLSession(session:, task:, willPerformHTTPRedirection response:, request:, completionHandler:)
, который именно то, что я хочу.
Еще лучше, реализация делегата рассматривает закрытие пользовательской переменной с именем taskWillPerformHTTPRedirection
, чтобы определить, как обращаться с перенаправлением - снова, именно то, что я хочу!
И насколько я могу судить, это закрытие всегда nil
по умолчанию - оно не назначается внутри Alamofire, что предполагает, что он предназначен для того, чтобы позволить пользователю назначить ему закрытие.
Проблема: я не могу получить доступ к этому закрытому классу SessionDelegate
, чтобы назначить закрытие его переменной taskWillPerformHTTPRedirection
. Это частный класс, и он не отображается в моих файлах Swift. Каковы надлежащие способы конфигурирования запроса Alamofire (не) для переадресации?
Гибкая обработка переадресации теперь находится в Alamofire благодаря другому запросу на перенос и доступна с помощью Alamofire 1.2.0
.
Вы можете использовать его так:
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
let sessionDelegate = Manager.SessionDelegate()
sessionDelegate.taskWillPerformHTTPRedirectionWithCompletion = {
(session: NSURLSession, task: NSURLSessionTask, response: NSHTTPURLResponse,
newRequest: NSURLRequest, completionHandler: NSURLRequest? -> Void) in
// do something
}
let manager = Manager(configuration: configuration, delegate: sessionDelegate)
Alamofire Manager сохраняет delegate
настолько сильным, что вы можете быть уверены
public let delegate: SessionDelegate
но помните willPerformHTTPRedirection
Этот метод вызывается только для задач в дефолтных и эфемерных сессиях. Задачи в фоновых сеансах автоматически следуют за перенаправлениями.
также полезно читать об основных принципах Обработка перенаправления и другие изменения запроса
Я думаю, что проблема обсуждалась давно, проверьте этот issue
Матовый ответ был ясен, хотя:
Я предполагаю, что в SessionDelegate есть различные свойства, TaskDelegate, DataTaskDelegate и DownloadTaskDelegate предназначены для для использования клиентами для расширения/переопределения отдельных делегатов поведение.
Собственно, это неверно. Они реализованы внутри ради полноты. Любая функциональность, предназначенная для конечного пользователя будет отображаться в Менеджере или Запросить.
В любом случае я вижу, что щедрость предлагается Аароном, а Джонатан разворачивал свою собственную версию, поэтому почему вы используете эту вилку?