RestKit处理不同的HTTP状态代码

时间:2011-10-02 19:39:38

标签: ios http restkit

我刚刚开始试用我正在构建的iOS应用程序的RestKit。我通常使用ASIHttpRequest,但我想测试RestKit主要是因为它在JSON和CoreData之间的对象映射。关于RestKit有一些很棒的东西,但是我遇到了一个让它感觉不足的问题,除非我做错了什么或错过了什么。我希望有人可以指导我。

我正在使用RKObjectLoader来制作异步和放大器同步调用REST API。我的服务旨在发回适当的HTTP状态代码以及某种描述,401是API何时需要经过身份验证的用户的示例。

我的问题是,如果我收到401错误,RestKit会停止正常运行。 RKResponse对象的状态代码为0,即使它有一个有效负载。我很确定这归结为NSURLConnection对HTTP状态的糟糕处理,但我希望RestKit以某种方式包裹它。特别是因为RKResponse类有很多包装器函数来确定响应的状态代码(isOK,isCreated,isForbidden,isUnauthorized等)。

相比之下,ASIHttpRequest不使用NSURLConnection,而是使用较低级别的CFNetwork代码。 ASIHttpRequest允许我通过HTTP查看确切的内容,而不会发送错误和&右。

问题是,我做错了什么,或者这是RestKit的预期行为?有没有人能够成功拨打[RKResponse isAuthenticated]?虽然对我来说不确定,但在这方面运行异步和同步模式之间是否有任何区别。我确实读过NSURLConnection在同步模式下运行的地方有点不同,即使底层代码只是调用异步操作。这与我使用RKObjectLoader而不仅仅是RKRequest有什么关系吗?也许有效负载无法映射到模型的事实会导致愤怒,但似乎代码在RKRequest.send异步中早先破坏,在映射实际发生之前。

底线是我的代码需要能够自由读取HTTP状态代码。任何指导都将非常感激。

海德尔

2 个答案:

答案 0 :(得分:2)

RestKit 0.20.x的常用方法是继承RKObjectRequestOperation。 我写了一篇关于这个问题的博客文章,可以在这里找到: http://blog.higgsboson.tk/2013/09/03/global-request-management-with-restkit/

答案 1 :(得分:0)

请参阅http://groups.google.com/group/restkit/msg/839b84452f4b3e26

“......当身份验证失败时,身份验证质询会被取消,并且会有效地阻止请求。”

更新:

RestKit已经为此包含了一个委托方法:

(void)request:(RKRequest *)request didFailAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;

之前触发

(void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error

当HTTP基本身份验证失败时,我们可以改为使用它。