【问题标题】:Alamofire retry request with modified payload修改有效载荷的 Alamofire 重试请求
【发布时间】:2019-12-06 09:26:43
【问题描述】:

当我收到某个 400 错误时,我一直在考虑使用 alamofire 重试请求,并且到目前为止重试有效,但是我不确定是否可以修改请求对象,以便在重试时它有一个更新的有效载荷。

欢迎任何建议和阅读材料的链接。

这是我的代码:

class HTTP412Retrier: RequestRetrier, RequestAdapter {

  func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
    print("called") // this is not being printed 
    return urlRequest
  }


  func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) {
    if let response = request.task?.response as? HTTPURLResponse, response.statusCode == 412 {
      completion(request.retryCount < 3, 0.0)
    } else {
      completion(false, 0.0)
    }
  }
}

【问题讨论】:

    标签: swift alamofire


    【解决方案1】:

    文档谈论adapting and retrying requests,所以我认为这就是您要查找的内容。

    我编写了以下内容,它按预期命中了adapt(_:) 函数

    import UIKit
    import Alamofire
    
    class ViewController: UIViewController {
    
        let sessionManager = Alamofire.SessionManager(configuration: URLSessionConfiguration.default)
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            sessionManager.adapter = AccessTokenAdapter(accessToken: "1234")
            sessionManager.request("http://example.com")
        }
    
    }
    
    class AccessTokenAdapter: RequestAdapter {
    
        private let accessToken: String
    
        init(accessToken: String) {
            self.accessToken = accessToken
        }
    
        func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
            var urlRequest = urlRequest
            guard let urlString = urlRequest.url?.absoluteString, urlString.hasPrefix("https://example.com") else { return urlRequest }
            urlRequest.setValue("Bearer " + accessToken, forHTTPHeaderField: "Authorization")
            return urlRequest
        }
    
    }
    

    【讨论】:

    • 谢谢我试图在这个函数中设置一个断点,但是在重试期间应该调用函数时没有调用它
    • 看不到任何代码,实在是帮不上忙了
    • 您是否通过会话管理器使用上述代码并将会话管理器的适配器分配为上述适配器?
    • 是的,应该可以正常调用该函数,但没有调用适配器
    • 我已将代码添加到我的答案中。在adapter函数中设置断点表明它被调用了
    猜你喜欢
    • 1970-01-01
    • 2021-11-15
    • 2023-01-05
    • 2022-01-08
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多