2014-10-20 108 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