2

使用 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,这是一个失败代码,但错误为 nil。为什么会出现这种情况?

4

1 回答 1

2

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

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

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

于 2017-12-12T18:58:59.023 回答