0

Rails 3.x アプリケーションによって提供される Web サービスを使用する iOS アプリを作成しています。GET具体的には、このブロックで単純な要求に応答するコントローラーからの JSON 応答を受信しようとしています。

# 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 エンドポイントを呼び出すと、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 アプリにブレークポイントをスローし、通過するヘッダーを調べると、(URL が示すように)AFNetworkingに設定request.formatされているように見えますが、設定されmobileているようです。私のブラウザからは、そうあるべきです。format.jsonrequest.formatapplication/json

URL のリクエストで、このオプションをクエリ文字列パラメーターとして手動で設定しようとしましformatたが、困惑しています。何も機能しません。足りないものはありますか?AFNetworkingこれを機能させるためにリクエストヘッダーとして使用するように指示する必要がありますか? 私は途方に暮れています。

4

1 に答える 1

1

AFNetworkingのソースコードを検索したところ、フォーマットが設定されている場所がなくmobile、文字列がソースに一度も表示されません。

これはRails側で発生している必要があります。モバイルMime::Typeエイリアスを定義していますか?コードを検索して、mobile何が表示されるかを確認します。一時的な修正については、次のように書き直します

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