Alamofire 4.0 RequestRetrier应该(_,retry,with,completion)不被调用

时间:2016-09-20 15:24:27

标签: ios swift alamofire

我正在使用Alamofire 4.0的RequestRetrier来控制对过期访问令牌的请求的重试。我正在关注文档here

我与文档OAuth2Handler中提供的示例非常相似,后者实现了RequestAdapterRequestRetrier

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

调试,我发现SessionDelegate仅在出现错误时调用should(_,retry,with,completion),但返回与授权问题相关的状态代码的请求似乎不会产生错误,因此该方法永远不会被召唤。

我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:21)

也许你没有收到错误。 Alamofire不会将400个回复视为错误。如果您希望在收到400代码时收到错误,则应将validate()链接到请求。 如果是这种情况,您可以找到更多信息here

答案 1 :(得分:12)

完全按照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