2013-05-18 13 views
6

RestSharpを使用してクライアント側で開発しています。私はまた、サーバー側で私のカスタムAPIのRuby Grape gemを使用しています。ブドウの宝石は、コンソール経由application/vnd.twitter-v1+jsonRestSharpヘッダーの変更を受け入れる

、テストコマンドにHTTPヘッダーf.eを受け入れる設定することにより、バージョン管理を行うことができます

curl -H Accept=application/vnd.twitter-v1+json /statuses/public_timeline 

完璧な作品しかし、私は、サーバー上error 404を取得していますRestRequestのヘッダを設定しようとしていたとき。

私はなぜそう考えているのですか?私はサーバーが406 errorを返すという別の問題を発見しましたが、私のケースでは404です。

Acceptヘッダーにカスタム値を入れるにはどうしたらいいですか?

答えて

5

あなたはJSONを自分でデシリアライズして喜んでいる場合、これは正常に動作する必要があります... AddHeader方法で

var client = new RestClient("http://example.com/api"); 
var request = new RestRequest("statuses/public_timeline", Method.GET); 
request.AddHeader("Accept", "application/vnd.twitter-v1+json"); 
var response = client.Execute(request); 
var json = response.Content; 

をカスタムAcceptヘッダーを設定することができます。 RestSharp documentation about deserializationからあなたはあなたのための自動逆シリアル化の処理を行い、一般的なExecute<T>方法、を利用したい場合は、あなたが問題に実行されます


...

RestSharpは、 XMLとJSONを処理するデシリアライザ。レスポンスを受信すると、RestClientは、サーバーによって返されたコンテンツタイプに基づいて使用する正しいデシリアライザを選択します。デフォルトはオーバーライドできます(「カスタマイズ」を参照)。ビルトインでサポートされているコンテンツの種類は以下のとおりです。

  • アプリケーション/ JSON - JsonDeserializer
  • アプリケーション/ xmlの - XmlDeserializer
  • テキスト/ JSON - JsonDeserializer
  • text/xmlで - XmlDeserializer
  • * - XmlDeserializer (他のすべてのコンテンツタイプは指定されていません)

これはレスポンスのコンテンツタイプがリストされているコンテンツタイプでない場合、RestSharpはデータでXmlDeserializerを使用しようとします。これは余分な作業でもカスタマイズ可能です。