如果是400(错误请求)或403(未经授权),我可以从响应中获取有关失败的信息,而在param中传递的错误总是为零 - 是否需要任何额外的设置?
Alamofire.request(Router.SignIn(emailField.text, passwordField.text)).response { (request, response, data, error) in
println(error)
println(NSString(data: data, encoding: NSUTF8StringEncoding))
}
UPD:正如mattt所建议的那样添加valide:
Alamofire.request(UdacityRouter.SignIn(emailField.text, passwordField.text)).validate().response
in
println(error)
println(NSString(data: data, encoding: NSUTF8StringEncoding))
}
结果我收到"Optional("The operation couldn’t be completed. (com.alamofire.error error -1.)")"
什么远离有意义的失败解释...我想知道为什么我不能简单地通过AFNetworking的简单失败解释得到错误..
答案 0 :(得分:3)
需要添加.validate(),因为默认情况下,无论响应的内容如何,Alamofire都会将任何已完成的请求视为成功。
来自Alamofire文档:
<强>验证强>
默认情况下,Alamofire会将任何已完成的请求视为成功, 无论回复的内容如何。在之前调用验证 响应处理程序会在响应有效时生成错误 不可接受的状态代码或MIME类型。
手动验证
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"]) .validate(statusCode: 200..<300) .validate(contentType: ["application/json"]) .response { _, _, _, error in println(error) }
自动验证
自动验证200 ... 299范围内的状态代码 响应的Content-Type标头与Accept标头匹配 请求,如果有的话。
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"]) .validate() .response { _, _, _, error in println(error) }