2016-09-20 2 views
5

Я использую RequestRetrier Alamofire 4.0 для управления повторным запросом на токен с истекшим доступом. Я следую документации here.Alamofire 4.0 RequestRetrier должен (_, повторить, с, завершение) не называться

У меня очень похожая реализация на примере, доступном в документации OAuth2Handler, которая реализует RequestAdapter и RequestRetrier.

Проблема, с которой я сталкиваюсь, заключается в том, что func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) никогда не называется. Метод adapt реализации RequestAdapter действительно называется.

Отладка, я вижу, что SessionDelegate вызывает только should(_,retry,with,completion) при возникновении ошибки, но запросы, которые возвращают коды состояния, связанные с проблемами авторизации, похоже, не генерируют ошибок, поэтому метод никогда не вызывается.

Я что-то пропустил?

ответ

11

Возможно, вы не получили сообщение об ошибке. 400 ответов не рассматриваются как ошибка на Alamofire. Если вы хотите получить сообщение об ошибке при получении кода 400, вам необходимо связаться с validate(). Если это ваш случай, вы можете найти более подробную информацию here.

+1

Забыл позвонить правительству! Вот и все, спасибо @crisisGriega! –

8

Как показано на примере в documentation, мой не работал. Я уже использовал validate(), как показано на примере.

let sessionManager = SessionManager() 
sessionManager.adapter = oauthHandler 
sessionManager.retrier = oauthHandler 
let urlString = "\(baseURLString)/some/endpoint" 

sessionManager.request(urlString).validate().responseJSON { response in 
debugPrint(response) 
} 

Несмотря на то, после замены SessionManager() с Alamofire.SessionManager.default, метод func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) получает вызывается.

let sessionManager = Alamofire.SessionManager.default 
+0

Вы поняли, почему это происходит, у меня такая же проблема. – Andrea

+0

@ Аndrea Нет. – Ashildr

+0

Нужно также, чтобы это сработало: let sessionManager = Alamofire.SessionManager.default –