我正在构建一个iOS应用程序以使用由Rails 3.x应用程序提供的Web服务;具体来说,我期望收到来自控制器的JSON响应,并通过此块响应简单的GET
请求。AFNetworking HTTPClient从Rails JSON服务接收406
# after some data calls...
respond_to do |format|
format.json { render :json => some_object }
format.xml { render :xml => some_object }
end
在我的iPhone应用程序,我使用的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
喜欢它应该。
我试过手动设置这个format
选项在我的请求中的URL,作为查询字符串参数...我很难过。什么都没有有什么我失踪?我需要告诉AFNetworking
将其用作请求标题以使其起作用?我很茫然。
感谢,@coneybeare,我认为你是正确的 - 现在我想起来了,有可能是另一个插件采取这种格式特性参数的控制,如果它的到来从iOS设备(mobile_fu也许;这是另一个开发者的Rails应用程序)。我会采取甘德。感谢指针。 – 2012-07-13 01:59:55
另外,当我抛出'respond.mobile'时,HTTP客户端由于某种原因期望接收HTML。我打赌它是'mobile_fu'。 – 2012-07-13 03:14:49
我所使用的API控制器是从'ApplicationController'继承而来的,该''Application''上有'has_mobile_fu'声明。打破继承链固定它。谢谢你的帮助! – 2012-07-13 15:17:15