加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

json – Alamofire错误域= NSURLErrorDomain代码= -999“已取消

发布时间:2020-12-14 18:07:32 所属栏目:百科 来源:网络整理
导读:我已经成功获得了令牌的钥匙串并将其传递给下面显示的AccessTokenAdapter类. http127.0.0.1:8000 / api2 / projects /?format = json作为projectsURL传递. class AccessTokenAdapter: RequestAdapter { private let accessToken: String init(accessToken:
我已经成功获得了令牌的钥匙串并将其传递给下面显示的AccessTokenAdapter类.
http127.0.0.1:8000 / api2 / projects /?format = json作为projectsURL传递.

class AccessTokenAdapter: RequestAdapter {
        private let accessToken: String

        init(accessToken: String) {
            self.accessToken = accessToken
        }

        func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
            var urlRequest = urlRequest
         //   print("JWT (accessToken)")
            urlRequest.setValue("JWT (accessToken)",forHTTPHeaderField: "Authorization")

            return urlRequest
        }
    }


    let sessionManager = SessionManager()
    sessionManager.adapter = AccessTokenAdapter(accessToken: self.keychain["token"]!)

    sessionManager.request(self.projectsURL,method: .get,encoding: JSONEncoding.default).responseJSON{ response in
        switch response.result {
        case .success:
            print("yey I made it")
        case .failure(let error):
            print(error)
        }
    }

但是,从打印(错误),我的Xcode显示错误
错误域= NSURLErrorDomain代码= -999“已取消”UserInfo = {NSErrorFailingURLKey = http://127.0.0.1:8000/api2/projects/?format=json,NSLocalizedDescription =已取消,NSErrorFailingURLStringKey = http127.0.0.1:8000 / api2 / projects /?format = json}

有任何想法吗?
Alamofire 4.0
钥匙扣
Xcode 8.1
Swift3
使用JWT进行身份验证
使用Postman with header,key =“Authentication”,value =“JWT(此处生成的令牌)”工作正常

解决方法

当你使sessionManager成为一个常量时,它不会比拥抱它的功能更长寿,因此一旦管理器被释放,会话就会结束.

要解决此问题,请将sessionManager保持更长时间.例如,在我的情况下,我使它成为一个类属性:

class NetworkRequest: {

   var sessionManager = Alamofire.SessionManager()

   ...

   func performRequest(_ call: APICall,customLink: String = "",parameters: Dictionary<String,Any> = ["":"" as Any]) {

        let sessionConfig = URLSessionConfiguration.default
        sessionConfig.timeoutIntervalForRequest = call.suggestedTimeout()
        sessionConfig.timeoutIntervalForResource = call.suggestedTimeout()
        sessionManager = Alamofire.SessionManager(configuration: sessionConfig)
        sessionManager.adapter = AccessTokenAdapter()

        sessionManager.request(urlString,method: call.method(),parameters: parameters,encoding: call.chooseEncoding(),headers: [:])
        .responseJSON
        { response in
          ...
        }

}

根据您的具体情况,解决方案可能会有所不同,但其目的是让sessionManager保持活动状态,直到网络请求结束.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读