当前位置: 首页 > 知识库问答 >
问题:

Alamofire错误域=NSURErrorDomain代码=-999“已取消”

毕嘉
2023-03-14

我已经成功地为我的令牌获得了钥匙链,并将其传递给如下所示的AccessTokenAdapter类。超文本传输协议127.0.0.1:8000/api2/projects/?format=json传递为project ectsURL。

    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)
        }
    }

但是,从print(error)开始,我的Xcode显示了类似于error Domain=nsurerrordomain Code=-999“cancelled”UserInfo={nserrorfailingurkey的错误=http://127.0.0.1:8000/api2/projects/?format=json,NSLocalizedDescription=已取消,NSErrorFailingURLStringKey=http127。0.0.1:8000/api2/项目/?格式=json}

有什么想法吗
Alamofire 4.0
Keychain
Xcode 8.1
Swift3
使用JWT进行身份验证
使用带有标题的邮递员,key=“authentication”,value=“JWT(此处生成的令牌)”工作正常

共有3个答案

简滨海
2023-03-14

此错误通常是由于您创建的SessionManager超出范围并被取消身份,您的请求将被取消。保留对它的引用,我的解决方案是使用一个变量在APIService类中存储SessionManager

  public lazy var sharedManager: SessionManager = {
    let configuration = URLSessionConfiguration.default

    configuration.timeoutIntervalForRequest = 60
    configuration.timeoutIntervalForResource = 60

    let manager = Alamofire.SessionManager(configuration: configuration)
    return manager
}()
施赞
2023-03-14
self.getSessionManager()
                 .request(urlstring, 
                          method: methods, 
                          parameters: parameters, 
                          encoding: JSONEncoding.prettyPrinted, 
                          headers: Header
                  ).responseJSON(
                         queue: nil, 
                         options: JSONSerialization.ReadingOptions.allowFragments
) { (responseObject) in
 // response parsing code is here
}.session.finishTasksAndInvalidate() 

任务完成后,只需使用invalidate方法,即会话。finishtasks和invalidate()

所有作品都很棒。

上官迪
2023-03-14

当您将sessionManager设为let常量时,它不会比拥抱它功能的使用时间长,因此一旦释放了管理器,会话就会结束。

要解决此问题,请延长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处于活动状态,直到网络请求结束。

 类似资料:
  • 嗨,我试图使用阿拉莫菲尔为我的项目,但错误出来了。这是我的请求代码//谷歌测试 结果]:失败:错误域=nsurErrorDomain代码=-999“已取消” UserInfo={NSErrFailingURLKey=http://google.com/, NSLocalizedDescription=已取消, NSERRORFAILLINGURLSTRINGKEY=http://google.co

  • 我连接到的服务使用自签名证书。出于开发目的,我不想验证该链。 使用swift 3和Alamofire 4。相应地修正了自动测试系统: 用于连接和禁用计算的代码。 来自转储打印的错误日志 [结果]:失败:错误域=NSURErrorDomain代码=-999“已取消”用户信息={NSERRORFAILINGURKEY=https://sub.url.com/path,NSLocalizedDescri

  • 我正在我的项目中进行登录,我正在使用Alamofire请求(swift 2.0),我总是遇到无法解决的错误。 错误域=NSURLErrorDomain代码=-999“已取消”用户信息=。。。{NSErrorFailingURLKey=…,NSLocalizedDescription=已取消,NSErrorFailingURLStringKey=…} 这是我的密码: 当用户按下按钮时,我在Login

  • 问题内容: 像这样的代码: 问题答案: 不适用于我。最好在 Alamofire中 使用这样的代码:

  • 我正在使用iOS 11的AFN网络。我得到的错误如下: 任务 我已经尝试了所有可能的方法。 请帮我解决这个问题。 非常感谢。

  • 我用的是阿拉莫菲尔4。当我这样做的时候 我在控制台里有这样的东西: 我感兴趣的是一条特别的路线: 如何获取此代码以便正确处理错误。我尝试了所有我能编出来的组合,但是在任何地方都没有这个代码的痕迹。