2013-05-27 21 views
16

私はC#.NET 3.5でRESTful APIクライアントを構築しています。RestSharpを使用してHTTPリクエスト本文にアクセスする方法は?

私は最初に良い古いHttpWebClient(とHttpWebResponse)でビルドを開始しました。私は何とかしたいと思いました。私は幸せだった。私が立ち往生した唯一の事は、JSONレスポンスからの自動デシリアライゼーションでした。

RESTful APIクライアントの開発を容易にし、JSONとXML応答を自動的に逆シリアル化するRestSharp(104.1)という素晴らしいライブラリについて聞いたことがあります。私はすべてのコードを変更しましたが、現在はHttpWebClientHttpWebResponseでできることはできません。アクセスして生のリクエストボディを編集することができます。

誰でも解決策がありますか?

編集:私はリクエストボディ(request.AddBody())を設定する方法を知っています。私の問題は、このリクエストボディストリングを取得し、編集し、リクエストで再設定したいということです。フライ)

答えて

34

リクエストボディはパラメータの一種です。 1を追加するには、あなたがTypeParameterType.RequestBodyに等しいreq.Parametersコレクション内のアイテムを探すことができます体のパラメータを取得するには、次のいずれか...

req.AddBody(body); 
req.AddBody(body, xmlNamespace); 
req.AddParameter("text/xml", body, ParameterType.RequestBody); 
req.AddParameter("application/json", body, ParameterType.RequestBody); 

を行うことができます。

RestRequestクラスhereのコードを参照してください。このパラメータが設定されている

場合、それは リクエストのボディとして送信される値だ:ここでは

RestSharp docs on ParameterType.RequestBodyが言っているものです。 Parameterの名前は無視され、追加されます。 RequestBody Parameters - 1のみが受け入れられます。

RequestBodyは実際には というボディのみを送信するため、POSTリクエストまたはPUTリクエストでのみ動作します。

GetOrPostパラメーターもある場合は、 RequestBodyを上書きします。RestSharpはそれらを結合しませんが、代わりに RequestBodyパラメーターを捨てます。

オンザフライ体のパラメータを更新/読み出すために、あなたが試すことができます:

var body = req.Parameters.Where(p => p.Type == ParameterType.RequestBody).FirstOrDefault(); 
if (body != null) 
{ 
    Console.WriteLine("CurrentBody={0}", body.Value); 
    body.Value = "NewBodyValue"; 
} 

それとも異なるボディとRestRequestオブジェクトの新しいコピーを作成することができません。

+1

優秀、ありがとう!完全な作業コードがあります:http://pastebin.com/0c4bqPNW – Epoc

関連する問題