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 Validation200...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返回状态代码问题的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 的 Swift 扩展方法返回 SwiftyJSON 结果

Swift - Alamofire源码解析

Swift - Alamofire源码解析

Swift - Alamofire源码解析

Swift - Alamofire源码解析

如何在 Alamofire Swift 中刷新 JWT 令牌状态代码 500