我正在使用Alamofire 4.0的RequestRetrier
来控制对过期访问令牌的请求的重试。我正在关注文档here。
我与文档OAuth2Handler
中提供的示例非常相似,后者实现了RequestAdapter
和RequestRetrier
。
我遇到的问题是永远不会调用func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion)
。 adapt
实现的RequestAdapter
方法确实会被调用。
调试,我发现SessionDelegate
仅在出现错误时调用should(_,retry,with,completion)
,但返回与授权问题相关的状态代码的请求似乎不会产生错误,因此该方法永远不会被召唤。
我在这里错过了什么吗?
答案 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