Ruby on rails AFHttpClient从Rails JSON服务接收406
我正在构建一个iOS应用程序来使用Rails3.x应用程序提供的web服务;具体地说,我希望从一个控制器接收一个JSON响应,该控制器使用这个块响应一个简单的Ruby on rails AFHttpClient从Rails JSON服务接收406,ruby-on-rails,ios,ruby,Ruby On Rails,Ios,Ruby,我正在构建一个iOS应用程序来使用Rails3.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应用程序中,我
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端点时,我会收到一个HTTP406错误——如果我在本地运行Rails应用程序,我可以验证发送的是什么。它成功地运行了所有的数据调用,当它到达respond\u to
块时,它似乎就死了,我很确定问题出在AFNetworking
发送的请求头中
下面是我的HTTP客户机为其头设置的内容
[self setDefaultHeader:@"Accept" value:@"application/json"];
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
我的终点是
http://localhost:3000/api/some_object.json
如果我在浏览器中调用此端点,它的渲染效果很好。如果我用iOS应用程序调用它,那么我会得到406。当我向Rails应用程序中抛出断点并检查通过的标题时,AFNetworking
似乎正在将请求.format
设置为mobile
——即使格式应该是.json
(如URL所示)。在我的浏览器中,request.format
是application/json
应该的格式
我已尝试在URL中的请求中手动设置此格式
选项,作为查询字符串参数。。。我被难住了。什么都不管用。有什么我遗漏的吗?我需要告诉AFNetworking
什么东西作为请求头来让它工作?我不知所措。我刚刚搜索了源代码,但没有任何地方将格式设置为mobile
,该字符串甚至一次都没有出现在源代码中
这必须发生在轨道一侧。您是否定义了任何移动Mime::类型别名?在您的代码中搜索mobile
,查看出现了什么。对于临时修复,我只需重写为
format.mobile { ... }
format.json { ... }
谢谢,@coneybeare,我想你是对的——现在我想起来了,可能有另一个插件控制了格式参数,如果它来自iOS设备(可能是移动设备;它是另一个开发人员的Rails应用程序)。我要一只鹅。感谢您的指针。另外,当我输入respond.mobile
时,HTTP客户端出于某种原因希望接收HTML。我打赌它是mobile\u-fu
。我拥有的API控制器是从ApplicationController
继承的,它上面有的mobile\u-fu
声明。打破继承链修复了它。谢谢你的帮助!