我正在構建一個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