ios - Swift 4 - Alamofire - 如何根据请求禁用缓存

标签 ios swift alamofire

我有这样的 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/

相关文章:

ios - 带有 DataTask Delegate 的 NSURLSession 返回 expectedContentLength negative(-1),无法计算文件大小

ios - 为什么我的代码在线程 6 : NSOperationQueue? 中运行时崩溃

ios - 如何使用 SPM 和 Xcode11 将二进制文件与库链接

ios - tabBarController navigationItem.title 颜色

ios - Twilio 视频 + 解析

xcode - Swift - 闭包表达式语法

swift - 使用 Alamofire 上传多部分表单数据文件

ios - 即使缓存策略设置为 ReloadIgnoringLocalAndRemoteCacheData,Alamofire 也会从缓存中加载

c# - 如何使 Xamarin 应用全屏(全屏)

ios - EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)在更改 uibutton 的标题标签大小更改时出现错误