0

我正在构建一个 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.formatmobile- 尽管format应该是.json(如 URL 所示)。从我的浏览器来看,应该是这样request.formatapplication/json

我已经尝试format在 URL 中的请求中手动设置此选项,作为查询字符串参数......我很难过。没有任何效果。有什么我想念的吗?我需要告诉AFNetworking它用作请求标头以使其正常工作吗?我不知所措。

4

1 回答 1

1

我刚刚搜索了AFNetworking源代码,并且没有将格式设置为的地方mobile,该字符串甚至没有出现在源代码中一次。

这必须发生在 Rails 方面。您是否定义了任何移动 Mime::Type 别名?搜索您的代码mobile以查看结果。对于临时修复,我会重写为

format.mobile { ... }
format.json { ... }
于 2012-07-13T01:41:04.233 回答