2012-07-13 66 views
0

我正在構建一個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.formatapplication/json喜歡它應該。

我試過手動設置這個format選項在我的請求中的URL,作爲查詢字符串參數...我很難過。什麼都沒有有什麼我失蹤?我需要告訴AFNetworking將其用作請求標題以使其起作用?我很茫然。

回答

1

我剛剛搜索了AFNetworking源代碼,並且無法將格式設置爲mobile,該字符串甚至不會在源中顯示一次。

這必須發生在Rails方面。你是否定義了任何移動Mime ::類型別名?搜索您的代碼mobile,看看發生了什麼。對於一個臨時補丁,我只想改寫爲

format.mobile { ... } 
format.json { ... } 
+0

感謝,@coneybeare,我認爲你是正確的 - 現在我想起來了,有可能是另一個插件採取這種格式特性參數的控制,如果它的到來從iOS設備(mobile_fu也許;這是另一個開發者的Rails應用程序)。我會採取甘德。感謝指針。 – 2012-07-13 01:59:55

+0

另外,當我拋出'respond.mobile'時,HTTP客戶端由於某種原因期望接收HTML。我打賭它是'mobile_fu'。 – 2012-07-13 03:14:49

+0

我所使用的API控制器是從'ApplicationController'繼承而來的,該''Application''上有'has_mobile_fu'聲明。打破繼承鏈固定它。謝謝你的幫助! – 2012-07-13 15:17:15