我有这样的 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)
}
}
}
但那没有用,结果相同。
最佳答案
您可以使用特定的 URLSessionConfiguration
实例化 Alamofire.SessionManager
。在配置中你可以设置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)
...
关于ios - Swift 4 - Alamofire - 如何根据请求禁用缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59736367/