swift上的Alamofire返回状态代码问题
Posted
技术标签:
【中文标题】swift上的Alamofire返回状态代码问题【英文标题】:Alamofire return status code issue on swift 【发布时间】:2016-03-27 15:33:55 【问题描述】:我正在使用 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)
)
【问题讨论】:
【参考方案1】:Alamofire 只接受Automatic Validation 内200...299
范围内的一系列http 状态码,如以下代码:
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)
希望对你有所帮助。
【讨论】:
我刚刚尝试过手动验证,但它似乎不起作用。我已经更新了我的帖子并在那里添加了我的代码。你能告诉我我在这里错过了什么吗?以上是关于swift上的Alamofire返回状态代码问题的主要内容,如果未能解决你的问题,请参考以下文章