【问题标题】:Alamofire 4.0 RequestRetrier should(_,retry,with,completion) not being calledAlamofire 4.0 RequestRetrier should(_,retry,with,completion) 不被调用
【发布时间】:2017-01-28 14:39:21
【问题描述】:

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

我有一个与文档OAuth2Handler 中的示例非常相似的实现,它实现了RequestAdapterRequestRetrier

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

调试,我看到SessionDelegate只有在出错的时候才调用should(_,retry,with,completion),但是请求返回与授权问题相关的状态码,似乎没有产生错误,所以这个方法永远不会被调用。

我错过了什么吗?

【问题讨论】:

    标签: ios swift alamofire


    【解决方案1】:

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

    【讨论】:

    • 你知道为什么会这样吗,我也遇到了同样的问题
    • @Andrea 不,我没有。
    • 也需要它以使其工作:让 sessionManager = Alamofire.SessionManager.default
    • 尝试 sessionManager.validate(statusCodes: [200])
    【解决方案2】:

    也许您没有收到错误消息。 Alamofire 不会将 400 响应视为错误。如果您想在收到 400 代码时出现错误,您应该将 validate() 链接到请求。 如果这是您的情况,您可以找到更多信息here

    【讨论】:

    • 忘记调用验证!就是这样,谢谢@crisisGriega!
    猜你喜欢
    • 2021-12-17
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 2019-04-27
    • 2017-04-20
    • 1970-01-01
    • 2018-06-08
    相关资源
    最近更新 更多