HttpClient リクエストの Content-Type ヘッダーを設定するにはどうすればいいですか? 質問する

HttpClient リクエストの Content-Type ヘッダーを設定するにはどうすればいいですか? 質問する

呼び出している API の要件に従ってオブジェクトContent-Typeのヘッダーを設定しようとしています。HttpClient

以下のように設定してみましたContent-Type

using (var httpClient = new HttpClient())
{
    httpClient.BaseAddress = new Uri("http://example.com/");
    httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
    httpClient.DefaultRequestHeaders.Add("Content-Type", "application/json");
    // ...
}

ヘッダーを追加することはできますAcceptが、追加しようとするとContent-Type次の例外がスローされます。

HttpRequestMessageヘッダー名が誤って使用されています。リクエスト ヘッダーが で、レスポンス ヘッダーが でHttpResponseMessage、コンテンツ ヘッダーがHttpContentオブジェクトで使用されていることを確認してください。

Content-Typeリクエストにヘッダーを設定するにはどうすればよいですかHttpClient?

ベストアンサー1

コンテンツ タイプはリクエストのヘッダーではなくコンテンツのヘッダーであるため、これが失敗します。AddWithoutValidationロバート・レヴィの提案によると動作する可能性もありますが、リクエスト コンテンツ自体を作成するときにコンテンツ タイプを設定することもできます (コード スニペットではapplication/json、Accept ヘッダーと Content-Type ヘッダーの 2 か所に追加されることに注意してください)。

HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://example.com/");
client.DefaultRequestHeaders
      .Accept
      .Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "relativeAddress");
request.Content = new StringContent("{\"name\":\"John Doe\",\"age\":33}",
                                    Encoding.UTF8, 
                                    "application/json");//CONTENT-TYPE header

client.SendAsync(request)
      .ContinueWith(responseTask =>
      {
          Console.WriteLine("Response: {0}", responseTask.Result);
      });

おすすめ記事