RestSharpが上書き手動でコンテンツタイプを設定しますか?

StackOverflow https://stackoverflow.com/questions/9432436

  •  12-11-2019
  •  | 
  •  

質問

rethSharp.restRequestを介して:

RestRequest request = new RestRequest();
request.Method = Method.POST;
request.Resource = "/rest-uri";

request.AddHeader("Content-Type", "application/someContentType");

string xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + Environment.NewLine +
             "<register-request">" + Environment.NewLine +
             "    <name=\"someName\"/>" + Environment.NewLine +
             "</register-request>");

request.AddParameter("text/xml", registerSinkRequest, ParameterType.RequestBody);
.

(content-typeは手動でapplication/someContentTypeに設定されています)

デバッグモードでは、Content-Type=application/someContentType も表示されます。

しかしRestRequestを実行する415 Media Not Supported-errorとWiresharkは、media-typeがtext/xml(AddParameter-methodのような設定)に設定されていることを示しています。

RestSharpがさまざまなコンテンツタイプでWiresharkを表示しているのはなぜですか?そして、Content-Typeを変更するのを防ぐ方法(そうであれば)?

役に立ちましたか?

解決

Svickのコメントは正しいです。 AddParameter()の最初のパラメータでコンテンツタイプを設定し、AddHeader()呼び出しを除外することができます。

それが「正しい」答えですが、それがこれをやっていないのかわかりやすい方法がある理由を説明します。

これを達成するための意図された方法は、AddBody()と共にRestRequest.RequestFormatを使用することです。例:

var client = new RestClient();
// client.XmlSerializer = new XmlSerializer(); // default
// client.XmlSerializer = new SuperXmlSerializer(); // can override with any implementaiton of ISerializer

var request = new RestRequest();
request.RequestFormat = DataFormat.Xml;
request.AddBody(objectToSerialize);
.

objectToSerializeのシリアル化は、登録されているXmlSerializerに基づいています。 RequestFormat = DataFormat.Jsonを使用すると、RestClient.JsonSerializerが使用されます。 ISerializer(デフォルトのシリアル化をオーバーライドするために使用できる)の実装は、使用しているJanky AddParameter()オーバーロードを渡すものである独自のコンテンツ型を宣言します。

AddParameter(contentType, content, ParameterType.RequestBody)は直接呼び出されることを意図していませんでした。 AddBody()からのデータを渡すことを回避する回避策として追加されましたが、他のものはそれがまったく立ち往生しています。それは後知でひどい決断でしたが、1xxのバージョンラインでそれを変更するのは遅すぎます。私が今までに別のバージョンを構築したら、これをより明白にします。

他のヒント

ボディコンテンツを設定したときのcontent-typeの変更可能です。BODYの名前パラメーターは、Content-Typeを設定します。

oRequest.Parameters.Add(new Parameter() { Name = "application/json;charset=UTF-8", Type = ParameterType.RequestBody, Value = sBody });
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top