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 的标准部分,因此对这些消息的自动解析也可能存在问题。