如何使用 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)"
您可以这样做:
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)
将已发布的 URLRequest
的 cachePolicy
设置为 reloadIgnoringLocalCacheData
,这将阻止存储其响应:
var request = URLRequest(...)
request.cachePolicy = .reloadIgnoringLocalCacheData
session.request(request).response...
使用 Alamofire 5 的 CachedResponseHandler
API 来防止基于每个请求的缓存:
session.request(...).cacheResponse(using: ResponseCacher.doNotCache).response...
在这样的配置下使用 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)"
您可以这样做:
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)
将已发布的 URLRequest
的 cachePolicy
设置为 reloadIgnoringLocalCacheData
,这将阻止存储其响应:
var request = URLRequest(...)
request.cachePolicy = .reloadIgnoringLocalCacheData
session.request(request).response...
使用 Alamofire 5 的 CachedResponseHandler
API 来防止基于每个请求的缓存:
session.request(...).cacheResponse(using: ResponseCacher.doNotCache).response...