我使用Alamofire 4.0的RequestRetrier
来控制过期访问令牌请求的重试。我在这里遵循文档。
我有一个非常类似于文档OAuth2Handler
中实现RequestAdapter
和RequestRetrier
的示例的实现。
我遇到的问题是func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion)
从未被调用。RequestAdapter
实现的adapt
方法会被调用。
调试时,我看到SessionDelegate
只在出现错误时调用should(_,retry,with,completion)
,但是返回与授权问题相关的状态码的请求似乎不会产生错误,因此该方法永远不会被调用。
我错过了什么吗?
也许你没有得到一个错误。400个响应不被Alamofire
视为错误。如果您想在接收到400代码时得到错误,您应该将validate()
链接到请求。如果您是这种情况,您可以在这里找到更多信息。
完全按照文档中的示例操作,我的示例不起作用。我已经使用了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