簡體   English   中英

Swift 4 - Alamofire - 如何根據請求禁用緩存

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM