这是我第一次使用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
答案 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)
}
}