xcode 无法从 Alamofire 3.3.0 获取服务器错误消息
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/36331234/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Could not get the server error message from Alamofire 3.3.0
提问by Joseph Wahba
It is my first time for me to use Alamofire
, and it got me really frustrated.
这是我第一次使用Alamofire
,这让我非常沮丧。
I'm using the following code to call a signup API on the backend API
我正在使用以下代码在后端 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)
}
}
The problem is that the error object I'm getting in the .Failure
function doesn't contain the server side message.
I have tried to access the rest of the objects (request, response, data, result) I could not find my error message anywhere
问题是我在.Failure
函数中得到的错误对象不包含服务器端消息。我试图访问其余的对象(请求、响应、数据、结果)我在任何地方都找不到我的错误消息
I'm always getting the following error, no matter what the server message has to say. Request failed with error:
无论服务器消息怎么说,我总是收到以下错误。请求失败,错误:
FAILURE: Error Domain=com.alamofire.error Code=-6003 "Response status code was unacceptable: 400" UserInfo={NSLocalizedFailureReason=Response status code was unacceptable: 400}
失败:错误域=com.alamofire.error 代码=-6003“响应状态代码不可接受:400” UserInfo={NSLocalizedFailureReason=响应状态代码不可接受:400}
Is there is anything wrong I'm doing?
我做错了什么吗?
Swift 2.2, AlamoFire 3.3.0, Xcode 7.3
Swift 2.2、AlamoFire 3.3.0、Xcode 7.3
回答by Joseph Wahba
I managed to get it to work exactly the way I want is by dropping the status validation and check for the statusCode manually
我设法让它完全按照我想要的方式工作,方法是删除状态验证并手动检查 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)
}
}
回答by Kiran jadhav
updated for swift 3 :
为 swift 3 更新:
Used below lines of code:-
使用以下代码行:-
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)
}
}
回答by SafeFastExpressive
This is how to get the error domain, code and user info with Alamofire 4 and Swift 3. User info contains the error strings.
这是使用 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)
}
}