web-dev-qa-db-ja.com

RestSharpを使用して「Content-Type」ヘッダーを設定する

RSS読み取りサービスのクライアントを構築しています。私は RestSharp ライブラリを使用してAPIを操作しています。

APIの状態:

レコードを作成または更新するときは、application/jsonを設定する必要があります。 Content-Typeヘッダーとしてcharset = utf-8。

これは私のコードのようです:

RestRequest request = new RestRequest("/v2/starred_entries.json", Method.POST);
request.AddHeader("Content-Type", "application/json; charset=utf-8");
request.RequestFormat = DataFormat.Json;
request.AddParameter("starred_entries", id);

//Pass the request to the RestSharp client
Messagebox.Show(rest.ExecuteAsPost(request, "POST").Content);

しかしながら;サービスが返しています "エラー415: 'Content-Type:application/json; charset = utf-8' header。"Why isn ' tヘッダーを渡すRestSharp?

30
Shane Gowland

my blog で提供されるソリューションは、RestSharpのバージョン1.02以降はテストされていません。ソリューションに関する具体的な問題について、回答に対するコメントを送信していただければ、更新できます。

var client = new RestClient("http://www.example.com/where/else?key=value");
var request = new RestRequest();

request.Method = Method.POST;
request.AddHeader("Accept", "application/json");
request.Parameters.Clear();
request.AddParameter("application/json", strJSONContent, ParameterType.RequestBody);

var response = client.Execute(request);
55
Itanex

バージョン105.2.3.0では、この方法で問題を解決できます。

var client = new RestClient("https://www.example.com");
var request = new RestRequest("api/v1/records", Method.POST);
request.AddJsonBody(new { id = 1, name = "record 1" });
var response = client.Execute(request);

古い質問ですが、私の検索の一番上です-完全を期すために追加します。

30
Tom Elmore

これは少し古いですが、同じ問題に遭遇しました。「content-type」や「date」などの一部の属性はパラメーターとして追加できず、内部で追加されているようです。 「content-type」の値を変更するには、シリアライザーの設定を変更する必要がありました(以前にシリアル化されたJSONを本体に追加したため、使用しませんでした!)

RestClient client = new RestClient(requURI);
RestRequest request = new RestRequest(reqPath, method);
request.JsonSerializer.ContentType = "application/json; charset=utf-8";

これを行うとすぐに、ヘッダーが意図したとおりに表示されました。

 System.Net Information: 0 : [5620] ConnectStream#61150033 -   Header 
 {
  Accept: application/json, application/xml, text/json, text/x-json, text/javascript, text/xml
  User-Agent: RestSharp 104.1.0.0
  Content-Type: application/json; charset=utf-8
  ...
 }
9
Marc Wittmann

あなたはおそらくこの問題に遭遇します: https://github.com/restsharp/restsharp/issues/221 あなたの問題には有効な解決策があります@ http://itanex.blogspot.co.at/2012/02/restsharp-and-advanced-post-requests.html

3
D.R.
request.XmlSerializer = new DotNetXmlSerializer();
            request.Parameters.Clear();
            request.AddParameter(new Parameter()
            {
                ContentType = "application/xml",
                Name = "application/xml",
                Type = ParameterType.RequestBody,
                Value = request.XmlSerializer.Serialize(deleteUserQuery.UserDelRqHeader)
            });
            request.AddHeader("Accept", "application/xml");
0