我已经成功地为我的令牌获得了钥匙链,并将其传递给如下所示的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(此处生成的令牌)”工作正常
此错误通常是由于您创建的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
}()
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()
所有作品都很棒。
当您将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。当我这样做的时候 我在控制台里有这样的东西: 我感兴趣的是一条特别的路线: 如何获取此代码以便正确处理错误。我尝试了所有我能编出来的组合,但是在任何地方都没有这个代码的痕迹。