ios - swift 上的 Alamofire 返回状态代码问题

标签 ios xcode swift alamofire

我正在使用 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/

相关文章:

ios - 有可能知道字符串是否以 base64 编码?

swift - 试图找出欧拉项目问题 1,(求 1000 以下所有数字的总和,能被 3 整除,并且 5

ios - 将 iOS 7 SDK 与 llvm-gcc-4.2 一起使用

ios - swift 3 : Match different array of sound files to each each section in CollectionView

Swift 可选模式

ios - Cloudkit CKRecordZoneNotification 如何知道是否发生了添加或修改

iphone - 如何在应用程序初始化之前获取 GPS 位置?

ios - 禁用特定的 View 组件(显示 SWREvealViewController 时)

ios - 重新编译现有的 objective c 库以支持 arm8

ios - Swift:访问 Action 处理程序中的 socket 给出 "unrecognized selector sent to instance"