2014-10-20 54 views
2

我连接到一个API,它返回一个错误时,将返回以下:AFNetworking 2.0 - 处理错误返回状态码200

{ 
    "success": false, 
    "reason": "Could not authenticate successfully with given credentials", 
    "errorCode": "invalidCredentials" 
} 

它有一个application/json;charset=UTF-8Content-Type200一个Status Code

此刻,当我让网络通话,我的成功的块都必须弄清楚它是否有一个实际的成功响应或以上的错误。如果它得到如上所述的响应(成功= false),是否有可能调用失败块?

注:所有的错误反应将在相同的格式,上面用successreasonerrorCode领域。

如果需要,我可以提供我的一些AFNetworking代码,但真的,我只是在寻找如何可以这样做一些指针(也许小的代码示例)。

回答

0

你可以继承AFHTTPResponseSerializer和实施validateResponse:data:error:检查响应。

使用自定义AFHTTPResponseSerializer时要小心。使用不一致的web-API时会出现问题(我觉得很多)。您需要在代码中解释某处的这些不一致性。 AFHTTPResponseSerializer在您的代码中引入了另一个抽象层,这可能会在决定如何解决不一致问题时使事情复杂化。

+0

这看起来像一个很好的建议。你可能有一些示例代码或一些教程/解释的链接,因为我不完全理解'validateResponse:data:error:'方法内部应该做什么。 – Hodson 2014-10-20 12:42:55

0

你也可以继承的AFHTTPRequestOperationManager类并覆盖其GET/POST方法,使成功块已经处理了内部的预定义的格式。

+0

如果采取这种方式,我不应该继承'AFHTTPSessionManager'为[AFNetworking文件]中建议(http://cocoadocs.org/docsets/AFNetworking/2.4.1/Classes/AFHTTPRequestOperationManager.html)为'AFHTTPRequestOperationManager'? – Hodson 2014-10-20 13:19:18

+0

如果你需要会话,是的。如果您目前不使用SessionManager,我不会仅仅因为您的要求而引入它 – 2014-10-21 05:50:41

相关问题