2016-09-20 24 views
5

我正在使用Alamofire 4.0的RequestRetrier来控制对过期访问令牌的请求的重试。我正在关注文档hereAlamofire 4.0 RequestRetrier应该(_,retry,with,completion)不被调用

我和文档OAuth2Handler中可用的示例非常类似,它们实现了RequestAdapterRequestRetrier

我遇到的问题是func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion)永远不会被调用。 RequestAdapter实现的adapt方法确实被调用。

调试,我看到SessionDelegate仅调用should(_,retry,with,completion)时出现错误,但返回与授权问题状态代码的请求,似乎没有产生错误,所以该方法不会被调用。

我失去了一些东西在这里?

回答

11

也许你没有收到错误。通过Alamofire,400个响应不被视为错误。如果您希望在收到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) 
} 

尽管随着Alamofire.SessionManager.defaultSessionManager()更换之后,所述方法func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) 被调用。

let sessionManager = Alamofire.SessionManager.default 
+0

你有没有想过为什么会发生这种情况,我有同样的问题 – Andrea

+0

@Andrea不,我没有。 – Ashildr

+0

也需要它,让它工作:让sessionManager = Alamofire.SessionManager.default –

相关问题