[英]Swift 4 - Alamofire - How to disable cache on request
我有這樣的 Alamofire 請求:
func loginUser(_ username: String, password: String, completion: @escaping (_ result: Bool) -> Void)
{
let user = username
let password = password
let url = webservice
let credential = URLCredential(user: user, password: password, persistence: .none)
let headers = ["Accept": "application/json;odata=verbose", "Content-type": "application/json;odata=verbose"]
Alamofire.request(url, method: .get, headers: headers).authenticate(usingCredential: credential).responseJSON {
(response) in
print(response.result)
switch response.result {
case .success:
if let value = response.result.value {
completion(true)
}else{
print("There is error in the server response")
completion(false)
}
case .failure (let error):
print("The NTLM request error is: ", error.localizedDescription)
completion(false)
}
}
}
我的問題是當我在使用有效憑據后使用無效憑據時它會起作用,而不是吐出錯誤。 有人告訴我這可能是緩存問題,所以我的問題是如何禁用此請求的緩存?
我曾嘗試將此添加到我的請求的頂部:
URLCache.shared.removeAllCachedResponses()
但這沒有用
我也看到了這個:
urlRequest.cachePolicy = .reloadIgnoringCacheData
但我不知道在哪里應用它。
請幫忙!
更新
我嘗試了以下方法:
func loginUser(_ username: String, password: String, completion: @escaping (_ result: Bool) -> Void)
{
let user = username
let password = password
let url = webservice
let credential = URLCredential(user: user, password: password, persistence: .none)
var urlRequest = URLRequest(url: URL(string: url)!)
urlRequest.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
urlRequest.httpMethod = "get"
urlRequest.setValue("application/json;odata=verbose", forHTTPHeaderField: "Content-type")
urlRequest.setValue("application/json;odata=verbose", forHTTPHeaderField: "Accept")
Alamofire.request(urlRequest).authenticate(usingCredential: credential).responseJSON {
(response) in
switch response.result {
case .success:
if let value = response.result.value {
completion(true)
}else{
print("There is error in the server response")
completion(false)
}
case .failure (let error):
print("The NTLM request error is: ", error.localizedDescription)
completion(false)
}
}
}
但這不起作用,結果相同。
您可以實例化一個Alamofire.SessionManager
與特定URLSessionConfiguration
。 在配置中你可以設置cachePolicy。 這可能是這樣的:
let configuration = URLSessionConfiguration.default
configuration.requestCachePolicy = .useProtocolCachePolicy // or whatever you want
configuration.urlCache = nil
let mySessionManager = Alamofire.SessionManager(configuration: configuration)
然后按如下方式使用它:
mySessionManager.request(urlRequest)
....
請注意,如果您遵循此操作,則必須使用mySessionManager
來執行請求,而不是使用Alamofire.request
。
要使用 mySessionManager 發出請求,它基本上是相同的,而不是Alamofire.request(urlRequest)
...你使用mySessionManager.request(urlRequest)
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.