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

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

我对文档OAuth2Handler的示例有一个非常类似的实现,它实现了RequestAdapterRequestRetrier

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

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

我在这里错过了什么吗?

也许你没有收到错误。 Alamofire不会将400条回复视为错误。 如果您希望在收到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) } 

虽然在用Alamofire.SessionManager.default替换SessionManager() Alamofire.SessionManager.default ,方法func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion)

 let sessionManager = Alamofire.SessionManager.default