Alamofire 没有发现错误
Alamofire doesn't catch error
我正在使用 Alamofire 从我的服务器获取数据。但是,它没有捕获错误,因为错误 returned 是 nil
。我已经使用 AFNetworking 进行了测试,它运行良好。对于这两个操作,状态代码 returned 是 401 Unauthorized
。我的代码有问题吗?
我正在使用 GrapeAPI 作为我的后端。它所做的只是 return 请求失败时的错误
GrapeAPI
error!('Unauthorized', 401)
AFNetworking
manager.GET("someUrl", parameters: nil, success: { (_, object) in
}, failure: { (operation, error) in
// These are the outputs. I'm not assigning any values
// error.localizedDescription = "Request failed: unauthorized (401)"
// statusCode = 401
})
Alamofire
Alamofire.request(.GET, "url", parameters: nil)
.response { (a,b,data,error) in
// These are the outputs. I'm not assigning any values
// error = nil
// data = {"error":"Unauthorized"}
// statusCode = 401
}
我可以使用 statusCode 检查故障。但我更喜欢检查错误对象。但是,由于Alamofire中的错误是nil
,因此检查请求是否失败非常混乱。
Alamofire
不会将 401 Unauthorized
视为错误,因为它是有效的 return。在您的评论代码中,您正在为错误分配一个值而不是检查它是否有错误,它应该是:
Alamofire.request(.GET, "url", parameters: nil)
.response { (a,b,data,error) in
if error != nil{
println(error.localizedDescription)
} else {
if let data = data{
//You should probably use a switch statement here
if data.statusCode == 401 {
println("Unauthorized")
} else if data.statusCode == 200 {
println("Success")
}
}
}
我不确定我是否理解正确你的问题,但我希望对你有所帮助!
正如 Matt 在评论中提到的,我需要在调用 .response()
之前添加 .validate()
。这是设计使然。最终代码如下:
Alamofire.request(.GET, "url", parameters: nil)
.validate()
.response { (a,b,data,error) in
// error won't be nil now
// and statusCode will be 401
}
阅读 this detailed explanation(谢谢!)了解更多信息。
我正在使用 Alamofire 从我的服务器获取数据。但是,它没有捕获错误,因为错误 returned 是 nil
。我已经使用 AFNetworking 进行了测试,它运行良好。对于这两个操作,状态代码 returned 是 401 Unauthorized
。我的代码有问题吗?
我正在使用 GrapeAPI 作为我的后端。它所做的只是 return 请求失败时的错误
GrapeAPI
error!('Unauthorized', 401)
AFNetworking
manager.GET("someUrl", parameters: nil, success: { (_, object) in
}, failure: { (operation, error) in
// These are the outputs. I'm not assigning any values
// error.localizedDescription = "Request failed: unauthorized (401)"
// statusCode = 401
})
Alamofire
Alamofire.request(.GET, "url", parameters: nil)
.response { (a,b,data,error) in
// These are the outputs. I'm not assigning any values
// error = nil
// data = {"error":"Unauthorized"}
// statusCode = 401
}
我可以使用 statusCode 检查故障。但我更喜欢检查错误对象。但是,由于Alamofire中的错误是nil
,因此检查请求是否失败非常混乱。
Alamofire
不会将 401 Unauthorized
视为错误,因为它是有效的 return。在您的评论代码中,您正在为错误分配一个值而不是检查它是否有错误,它应该是:
Alamofire.request(.GET, "url", parameters: nil)
.response { (a,b,data,error) in
if error != nil{
println(error.localizedDescription)
} else {
if let data = data{
//You should probably use a switch statement here
if data.statusCode == 401 {
println("Unauthorized")
} else if data.statusCode == 200 {
println("Success")
}
}
}
我不确定我是否理解正确你的问题,但我希望对你有所帮助!
正如 Matt 在评论中提到的,我需要在调用 .response()
之前添加 .validate()
。这是设计使然。最终代码如下:
Alamofire.request(.GET, "url", parameters: nil)
.validate()
.response { (a,b,data,error) in
// error won't be nil now
// and statusCode will be 401
}
阅读 this detailed explanation(谢谢!)了解更多信息。