web-dev-qa-db-ja.com

RestSharpを使用してHTTPリクエストの本文にアクセスする方法

C#.NET 3.5でRESTful APIクライアントを構築しています。

私はまず古き良きHttpWebClient(およびHttpWebResponse)を使用してビルドを開始しました。幸せでした。私が行き詰まった唯一のことは、JSON応答からの自動逆シリアル化でした。

それで、RESTful APIクライアントの開発を容易にし、JSONとXML応答を自動的にデシリアライズするRestSharp(104.1)と呼ばれる素晴らしいライブラリについて聞いたことがあります。すべてのコードをオンに切り替えましたが、HttpWebClientHttpWebResponseを使用してできることは、未加工のリクエスト本文へのアクセスや編集などできないことがわかりました。

誰かが解決策を持っていますか?

編集:(request.AddBody()を使用して)リクエストの本文を設定する方法を知っています。私の問題は、このリクエストの本文の文字列を取得して編集し、リクエストに再設定することです(オンザフライでリクエストボディを更新する)

22
Epoc

リクエストボディはパラメータの一種です。追加するには、次のいずれかを実行できます...

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

Bodyパラメータを取得するには、Typereq.Parametersと等しいParameterType.RequestBodyコレクションでアイテムを検索します。

RestRequestクラスのコード ここ を参照してください。

ParameterType.RequestBody)上の---(RestSharpドキュメント のコメントは次のとおりです。

このパラメータが設定されている場合、その値はリクエストの本文として送信されます。パラメーターの名前は無視され、追加のRequestBodyパラメーターも無視されます。受け入れられるのは1つだけです。

RequestBodyは、実際に本文を送信するだけなので、POSTまたはPUT要求でのみ機能します。

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

オンザフライでbodyパラメータを読み取る/更新するには、次のことを試すことができます。

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

または、失敗した場合は、RestRequestオブジェクトの新しいコピーを別の本文で作成します。

50
davmos