【问题标题】:Alamofire return status code issue on swiftswift上的Alamofire返回状态代码问题
【发布时间】: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)

            })

【问题讨论】:

    标签: ios xcode swift alamofire


    【解决方案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)
            }
        }
    

    希望对你有所帮助。

    【讨论】:

    • 我刚刚尝试过手动验证,但它似乎不起作用。我已经更新了我的帖子并在那里添加了我的代码。你能告诉我我在这里错过了什么吗?
    猜你喜欢
    • 1970-01-01
    • 2016-04-16
    • 2016-01-18
    • 2018-01-05
    • 2018-07-09
    • 1970-01-01
    • 2015-08-04
    • 2016-02-07
    • 1970-01-01
    相关资源
    最近更新 更多