【发布时间】:2012-07-13 01:32:19
【问题描述】:
我正在构建一个 iOS 应用程序来使用 Rails 3.x 应用程序提供的 Web 服务;具体来说,我希望收到来自控制器的 JSON 响应,以响应带有此块的简单 GET 请求。
# after some data calls...
respond_to do |format|
format.json { render :json => some_object }
format.xml { render :xml => some_object }
end
在我的 iOS 应用程序中,我使用 AFNetworking 库来创建 AFHTTPClient 的子类来使用此服务。当我调用我的 GET 端点时,我收到一个 HTTP 406 错误 - 如果我针对本地运行的 Rails 应用程序运行它,我可以验证这就是发送的内容。它成功运行了所有数据调用,一旦到达respond_to 块,它似乎就死了,我很确定问题出在AFNetworking 正在发送的请求标头中。
这是我的 HTTP 客户端为其标头设置的内容。
[self setDefaultHeader:@"Accept" value:@"application/json"];
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
我的终点是这个……
http://localhost:3000/api/some_object.json
如果我在浏览器中调用此端点,它渲染得很好。如果我用我的 iOS 应用程序调用它,那么我会得到 406。当我在 Rails 应用程序中设置断点并检查正在通过的标头时,AFNetworking 似乎将request.format 设置为mobile — 即使format 应该是 .json(如 URL 所示)。在我的浏览器中,request.format 应该是 application/json。
我尝试在 URL 中的请求中手动设置此 format 选项,作为查询字符串参数...我很难过。没有任何效果。有什么我想念的吗?我需要告诉AFNetworking 用作请求标头以使其正常工作?我很茫然。
【问题讨论】:
标签: ruby-on-rails ios ruby