AFNetworking 2 - 请求失败时没有响应正文

Posted

技术标签:

【中文标题】AFNetworking 2 - 请求失败时没有响应正文【英文标题】:AFNetworking 2 - No response body when request fails 【发布时间】:2014-04-24 21:51:55 【问题描述】:

我将 AFNetworking 2 用于使用 REST API 的 ios 项目。当请求失败时,我无法获得正文响应。

我看到这个SO answer 说它可以从userInfo 字典中检索。不幸的是,在我的情况下,我没有在我的 userInfo 字典中获得带有响应正文的 NSLocalizedRecoverySuggestion 键值。相反,我看到了一个 AFNetworkingOperationFailingURLResponseErrorKey 键。

我的NSError日志是

Error Domain=AFNetworkingErrorDomain Code=-1011 "Request failed: bad request (400)" UserInfo=0xbe471a0 NSErrorFailingURLKey=http://***.com/api/users, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0xbc60e80>  URL: http://***.com/api/users   status code: 400, headers 
    Connection = "keep-alive";
    "Content-Length" = 85;
    "Content-Type" = "application/json; charset=utf-8";
    Date = "Thu, 24 Apr 2014 21:36:57 GMT";
    "X-Powered-By" = Express;
 , NSLocalizedDescription=Request failed: bad request (400)

正如您从标题中看到的那样,我收到的是"Content-Type" = "application/json; charset=utf-8";,所以其他answer 也不适用。

实际上Postman 中的正文响应如下所示:

"errorCode":100,"description":"There is already a registered user with that email."

后端是我自己在Node + Express中实现的。不过我在后端开发方面不是很有经验,所以也许我缺少一些东西或者我可以改变。

有谁知道为什么我在userInfo 中没有收到响应正文?

【问题讨论】:

【参考方案1】:

QuotingAFNetworking所有者:

(...) 推荐的方法是创建一个自定义响应序列化程序,将失败情况下的响应数据转换为适当的 NSError 对象。

您可以在另一个 AFNetworking 问题上查看 this answer 以了解如何将其与您的会话管理器集成,并查看 this repository 以了解如何实施它。

【讨论】:

以上是关于AFNetworking 2 - 请求失败时没有响应正文的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 2.0:NSLocalizedDescription=请求失败:不可接受的内容类型:文本/html

iOS - 连接 PHP 页面时 AFNetworking 失败

“请求失败:不可接受的内容类型:文本/html”使用 AFNetworking 2.0

请求失败:不可接受的内容类型:使用 AFNetworking 2.5 的图像/jpg

AFNetworking 问题:serialization.response Code=-1011 “请求失败:未找到 (404)”

带有 AFNetworking 的 iOS POST:NSLocalizedDescription=请求失败:内部服务器错误 (500)