来自 HTTP 状态码的 NSError

Posted

技术标签:

【中文标题】来自 HTTP 状态码的 NSError【英文标题】:NSError from HTTP status code 【发布时间】:2015-04-27 23:13:32 【问题描述】:

根据标准 HTTP 状态代码(理想情况下,在 localizedDescription 中包含一些人类可读消息)创建 NSError 对象的最佳方法是什么?是否有标准方法或者我应该创建自己的错误域以与NSError 一起使用?

【问题讨论】:

相关:***.com/questions/1779034/… 【参考方案1】:

Foundation 执行网络请求的对象通常会为您返回这些NSErrors。例如,NSURLConnection 将在其+sendAsynchronousRequest:queue:completionHandler: 方法的completionHandler 中提供NSError

如果您想自己动手,可以创建一个NSError 的实例,将其错误域设置为NSURLErrorDomain,将其code 设置为您想要的HTTP 状态代码,然后将其设置为localizedDescription 成为您需要的人类可读字符串。

【讨论】:

在我看来,将自己的错误代码添加到我无法控制的域是一个坏主意。 是的,你也可以有自己的错误域,这可能无法回答你有股票 NSURLErrors 的问题 当连接成功,服务器返回错误码时,传递给completionHandlerNSError?nil 如果这个答案是正确的,我会喜欢它,但它似乎是错误的。我检查过的最明显的状态码——404 和 500——根本不返回任何NSError,只返回nil 这是不正确的——只有在 NETWORKING 层失败时才会创建 NSError。如果联网成功,并且服务器发送了 402 状态,则不会创建 NSError。我一直在寻找这样的代码来为大量的 http 状态场景构建一个健壮的 NSError 表示。

以上是关于来自 HTTP 状态码的 NSError的主要内容,如果未能解决你的问题,请参考以下文章

HTTP状态码

检查http响应状态码的最佳方法?

如果没有来自 WebAPI 的帮助器,这不可能是从 MVC6 返回状态码的最佳方式,不是吗?

PIN 码的“达到最大尝试次数”的最佳 HTTP 状态码是啥?

验证 HTTP 200 和 500 状态码的 Alamofire 响应

处理 HTTP 状态码的通用机制