2015-01-03 2 views
21

Я пытаюсь настроить Alamofire на переадресацию (или нет) по запросу.Alamofire: переадресация через HTTP (или нет)

Alamofire имеет частный внутренний класс SessionDelegate, который служит в качестве NSURLSessionTaskDelegate для текущей сессии URL. SessionDelegate действительно реализует соответствующий метод делегата, URLSession(session:, task:, willPerformHTTPRedirection response:, request:, completionHandler:), который именно то, что я хочу.

Еще лучше, реализация делегата предусматривает закрытие настраиваемой переменной с именем taskWillPerformHTTPRedirection, чтобы определить, как обращаться с перенаправлением - опять же, именно то, что я хочу!

И насколько я могу судить, это закрытие всегда nil по умолчанию - оно не назначено внутренним путем Alamofire - это предполагает, что он предназначен для того, чтобы пользователь мог назначить ему закрытие.

Проблема: я не могу получить доступ к этому приватному классу SessionDelegate, чтобы назначить замыкание своей переменной taskWillPerformHTTPRedirection. Это частный класс, и он не отображается в моих файлах Swift. Каковы надлежащие способы настройки запроса Alamofire (не), следуя переадресации?

+0

Alamofire в AFnetworking уважает стандарты HTTP. поэтому я утверждаю, что он автоматически переадресовывается. Я знаю, потому что раньше я изменил домены, и приложение без проблем переместило перенаправление. – eddwinpaz

+0

AFNetworking может быть настроен так, чтобы не следовать перенаправлениям. У Аламофира, безусловно, есть основание сделать то же самое. –

+0

Поскольку Alamofire не так уж много кода и довольно молодая библиотека, я бы просто разветвил библиотеку и сам реализовал ее, используя taskWillPerformHTTPRedirection, как вы правильно заметили. Затем просто отправьте пиар. Кажется, что @mattt помещает эти крючки туда с самого начала, даже если они еще не используются публичным API Alamofire. –

ответ

8

Гибкое управление переадресацией теперь находится в Alamofire благодаря another pull request и доступно с Alamofire 1.2.0.

+0

Это выглядит великолепно. Спасибо за обновление! –

+0

Создаю пользовательский класс 'SessionDelegate'. Свойство «Alamofire.SessionDelegate» не может быть установлено. Как остановить повторное направление в Alamofire. – pkc456

0

Я думаю, что этот вопрос обсуждался давно, проверить этот issue

ответ Мэтта ясно, хотя:

Я предполагаю различные закрывающие типизированных свойства в SessionDelegate, TaskDelegate, DataTaskDelegate и DownloadTaskDelegate предназначаются , которые будут использоваться клиентами для расширения/переопределения конкретных делегатов .


На самом деле, это неправильно. Они реализованы внутренне для ради полноты. Любые функциональные возможности, предназначенные для конечного пользователя , будут выставлены на Менеджер или Запрос.

Во всяком случае я вижу, что наемный предлагают Аарон, в то время как Джонатан раздвоенного своего собственной version, так почему бы вам не использовать эту вилку?

3

Вы можете использовать его как этот

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 менеджера держит delegate так сильна, так что вы можете быть уверены, что

public let delegate: SessionDelegate 

но помните willPerformHTTPRedirection

Этот метод вызывается только для задач в дефолтных и эфемерных сессиях. Задачи в фоновых сеансах автоматически следуют за перенаправлениями.

также хорошо читать об основах Handling Redirects and Other Request Changes

 Смежные вопросы

  • Нет связанных вопросов^_^