我正在构建一个 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
库来创建 an 的子类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
我已经尝试format
在 URL 中的请求中手动设置此选项,作为查询字符串参数......我很难过。没有任何效果。有什么我想念的吗?我需要告诉AFNetworking
它用作请求标头以使其正常工作吗?我不知所措。