如何使用 Alamofire 忽略缓存的响应?

how to ignore cached response using Alamofire?

在这样的配置下使用 Alamofire,导致 错误 -999 请求被取消

let configuration = URLSessionConfiguration.default
    configuration.timeoutIntervalForRequest = 20
    configuration.requestCachePolicy = .reloadIgnoringLocalCacheData
    var sessionManager = Alamofire.SessionManager(configuration: configuration)
    sessionManager.request(url,
                              method: methodType,
                              parameters: resource.parameters,
                              headers: resource.headers)

然而,当我这样使用它时,它直接工作正常,但它缓存了响应..

Alamofire.request(url,
                          method: methodType,
                          parameters: resource.parameters,
                          headers: resource.headers)

我需要忽略缓存数据,使用第一个无效。

不确定为什么会出现此错误,但有多种方法可以解决此错误。

1.You 可以将时间戳添加到您的 API url 这样您就永远不会得到缓存的响应。

extension Date {
    func toMillis() -> Int64! {
        return Int64(self.timeIntervalSince1970 * 1000)
    }
} 

let currentTimeStamp = Date().toMillis()!
let url = "https://example.com?timestamp=\(currentTimeStamp)"
  1. 您可以这样做:

    var req = URLRequest(url: URL(string: "<URL>")!)
    req.httpMethod = "GET"
    req.setValue("application/json", forHTTPHeaderField: "Content-Type")
    req.setValue("<Auth KEY>", forHTTPHeaderField:"Authorization" )
    req.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
    
     Alamofire.request(req).validate().responseJSON { response in ...
    

已拍摄

-> 您是否尝试在再次请求之前删除 cacheResponse?

-> 或者尝试将 NSURLConnectionDelegate 的 willCacheResponse 方法设置为 nil 以防止缓存响应。

有很多方法可以实现(示例使用 Alamofire 5):

使用 ephemeral URLSessionConfiguration:

let configuration = URLSessionConfiguration.ephemeral
configuration.headers = .default
let session = Session(configuration: configuration)

使用没有 URLCache 实例的 URLSessionConfiguration

let configuration = URLSessionConfiguration.af.default
configuration.urlCache = nil
let session = Session(configuration: configuration)

将已发布的 URLRequestcachePolicy 设置为 reloadIgnoringLocalCacheData,这将阻止存储其响应:

var request = URLRequest(...)
request.cachePolicy = .reloadIgnoringLocalCacheData
session.request(request).response...

使用 Alamofire 5 的 CachedResponseHandler API 来防止基于每个请求的缓存:

session.request(...).cacheResponse(using: ResponseCacher.doNotCache).response...