Swift 4 URLSession 422 响应没有错误
Swift 4 URLSession 422 Response with No Error
使用 Swift 4,我这样调用 RESTful API:
let session = URLSession.shared
session.dataTask(with: request) { (data, response, error) in
if error != nil {
completion(nil)
} else {
if data != nil, let user = try? MyRequests.jsonDecoder.decode(User.self, from: data!){
completion(user)
}
else{
completion(nil)
}
}
}.resume()
响应的 statusCode 为 422,失败代码,但错误为零。为什么会出现这种情况?
URLSession.dataTask
返回的error
值用于表示网络错误(如无网络连接等)。但是,此变量中未返回 backend/API 错误。
如果您的后端返回更详细的错误消息作为响应正文,您需要解析 data
变量以查看问题的确切原因。内置网络方法实际上不会评估 HTTP 状态代码,您需要手动执行此操作。
在系统库中评估它们可能是不可取的,因为不能保证所有 API 都遵循 HTTP 状态代码,因此自动评估它们可能会导致错误的 success/error 消息。此外,没有用于返回错误消息的 HTTP request/response 的标准部分,因此对这些消息的自动解析也可能存在问题。
使用 Swift 4,我这样调用 RESTful API:
let session = URLSession.shared
session.dataTask(with: request) { (data, response, error) in
if error != nil {
completion(nil)
} else {
if data != nil, let user = try? MyRequests.jsonDecoder.decode(User.self, from: data!){
completion(user)
}
else{
completion(nil)
}
}
}.resume()
响应的 statusCode 为 422,失败代码,但错误为零。为什么会出现这种情况?
URLSession.dataTask
返回的error
值用于表示网络错误(如无网络连接等)。但是,此变量中未返回 backend/API 错误。
如果您的后端返回更详细的错误消息作为响应正文,您需要解析 data
变量以查看问题的确切原因。内置网络方法实际上不会评估 HTTP 状态代码,您需要手动执行此操作。
在系统库中评估它们可能是不可取的,因为不能保证所有 API 都遵循 HTTP 状态代码,因此自动评估它们可能会导致错误的 success/error 消息。此外,没有用于返回错误消息的 HTTP request/response 的标准部分,因此对这些消息的自动解析也可能存在问题。