我正在使用 alamofire 来处理 http 请求,但我发现 alamofire 只接受 200 到 299 之间的一系列 http 响应状态代码。有什么方法可以自定义可接受的状态代码吗?下面是我添加的带有自定义返回代码范围的代码,但它不起作用。响应代码是 10050。你能告诉我这里是否遗漏了什么吗?
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.timeoutIntervalForResource = 10 // seconds
configuration.timeoutIntervalForRequest = 10
let manager = Alamofire.Manager(configuration: configuration)
manager.request(.POST, "http://localhost:880/login",
parameters:["mobile" : mobile, "password" : password],
encoding: .URL)
.validate(statusCode: 200..<50000)
.response(queue: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), completionHandler: {
(request, response, data, error ) in
completeHandler(data, response, error)
})
最佳答案
Alamofire 只接受 Automatic Validation 中的一系列 http 状态码在 200...299
范围内,如以下代码:
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
.validate()
.responseJSON { response in
switch response.result {
case .Success:
print("Validation Successful")
case .Failure(let error):
print(error)
}
}
但您可以在 Manual Validation 中包含您想要的范围并且效果很好:
Alamofire.request(.GET, "https://realm.io/")
.validate(statusCode: 200..<500)
.responseJSON { response in
switch(response.result) {
case .Success(let value):
print(value)
case .Failure( _):
guard let statusCode = response.response?.statusCode else { return }
print(statusCode)
}
}
这个地址从我的国家返回一个 403
错误并且使用 Alamofire 工作得很好,即使不想自己验证和处理:
Alamofire.request(.GET, "https://realm.io/").responseJSON { response in
switch(response.result) {
case .Success(let value):
print(value)
case .Failure( _):
guard let statusCode = response.response?.statusCode else { return }
print(statusCode)
}
}
希望对你有帮助
关于ios - swift 上的 Alamofire 返回状态代码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36249152/