无法从Alamofire 3.3.0获取服务器错误消息

时间:2016-03-31 10:49:12

标签: ios xcode swift alamofire

这是我第一次使用Alamofire,这让我非常沮丧。

我正在使用以下代码在后端API上调用注册API

Alamofire.request(.POST, "\(self.authBaseURL)/signup", parameters: params, headers: headers, encoding: .JSON)
            .validate(statusCode: 200..<300)
            .validate(contentType: ["application/json"])
            .responseJSON { response in
                switch response.result {
                case .Success(let JSON):
                    print("Success with JSON: \(JSON)")
                    success(updatedUser)
                case .Failure(let error):
                    print("Request failed with error: \(error)")
                    failure(error)
                }

        }

问题是我在.Failure函数中获取的错误对象不包含服务器端消息。 我试图访问其余的对象(请求,响应,数据,结果)我无法在任何地方找到我的错误消息

无论服务器消息说什么,我总是会收到以下错误。 请求失败,错误:

  

FAILURE:Error Domain = com.alamofire.error Code = -6003“响应状态   代码是不可接受的:400“   UserInfo = {NSLocalizedFailureReason =响应状态代码为   不可接受:400}

我做错了吗?

Swift 2.2,AlamoFire 3.3.0,Xcode 7.3

3 个答案:

答案 0 :(得分:11)

我设法让它完全按照我想要的方式工作,方法是删除状态验证并手动检查statusCode

Alamofire.request(.POST, "\(self.authBaseURL)/signup", parameters: params, headers: headers, encoding: .JSON)
            .validate(contentType: ["application/json"])
            .responseJSON { response in
                if response.response?.statusCode == 200 {
                    print("Success with JSON: \(response.result.value)")

                    success(updatedUser)
                }
                else {
                    let error = response.result.value as! NSDictionary
                    let errorMessage = error.objectForKey("message") as! String
                    print(errorMessage)
                    failure(errorMessage)
                }


        }

答案 1 :(得分:2)

  

更新为swift 3:

在下面的代码行中使用: -

    Alamofire.request(escapedString!, method: .get, encoding: JSONEncoding.default)
        .validate(contentType: ["application/json"])
        .responseJSON { response in
            if response.response?.statusCode == 200 {
                print("Success with JSON: \(String(describing: response.result.value))")

            }
            else {
                let error = (response.result.value  as? [[String : AnyObject]])
                print(error as Any)
            }
    } 

答案 2 :(得分:2)

这是如何使用Alamofire 4和Swift 3获取错误域,代码和用户信息。用户信息包含错误字符串。

Alamofire.request(.POST, "\(self.authBaseURL)/signup", parameters: params, headers: headers, encoding: .JSON)
            .validate(statusCode: 200..<300)
            .validate(contentType: ["application/json"])
            .responseJSON { response in
                switch response.result {
                case .Success(let JSON):
                    print("Success with JSON: \(JSON)")
                    success(updatedUser)
                case .Failure(let error):
                    let errorCode = error._code
                    let errorDomain = error._domain
                    let userInfo = error._userInfo
                    print("Request failed with error: \(error), code: \(errorCode), domain: \(errorDomain)")
                    failure(error)
                }

        }