Swift 4 URLSession 422响应无错误

Swift 4 URLSession 422响应无错误,swift,urlsession,Swift,Urlsession,使用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

使用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()

响应的状态代码为422,为失败代码,但错误为零。为什么会发生这种情况?

URLSession返回的
错误值。dataTask
用于表示网络错误(例如没有internet连接等)。但是,此变量中不会返回后端/API错误

如果后端返回更详细的错误消息作为响应主体,则需要分析
数据
变量,以查看问题的确切原因。内置的网络方法实际上不会评估HTTP状态代码,您需要手动执行


在系统库中评估它们可能并不可取,因为不能保证所有API都遵循HTTP状态代码,因此自动评估它们可能会导致错误的成功/错误消息。此外,HTTP请求/响应中没有用于返回错误消息的标准部分,因此对这些错误消息的自动解析也可能存在问题。

请检查postman中的url,并查看输出内容。您应该查看API的文档。API背后的工程师似乎没有遵循最佳实践,指示错误的状态代码不一定附带解释问题确切原因的实际错误消息。没有任何标准/规则要求REST API同时完成这两项工作,因此对于“为什么会发生这种情况?”这个问题,唯一能给出明确答案的人是构建特定API的人。@DávidPásztor我构建了API。它是一个422,带有包含“错误”的HTTP主体。无论如何,我认为URLSession库不应该接受状态代码422作为成功。422是一些API后端框架用来返回错误的默认代码,而不仅仅是“网络连接”错误。Android在没有任何特殊解决方法的情况下解析它们。