HttpClientでapplication/jsonをヘッダに追加しようとするとエラーになる(C#)

スポンサーリンク

Azure FunctionsでLine Botを作っているときに遭遇した壁です。
解決に至ったので備忘録として記載しておきます。

※この情報は2017年3月14日時点の情報になります。

JSONデータをPOSTするのでHTTPヘッダに[application/json]を追加しようと下記のようにコーディングしました。

using (var httpClient = new HttpClient())
{
   client.DefaultRequestHeaders.Add("Content-Type", "application/json");
}

するとエラーとなり下記のメッセージが表示されます。

Exception while executing function:
Functions.PraiseLineBot. System.Net.Http:
Misused header name.
Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects.

これはリクエストヘッダにContent-Type を指定できないため発生するエラーのようです。
じゃぁ、どう対応すればいいかというと下記のようにすればいいようです。

using (var client = new HttpClient())
{
   HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, {POST先URL});
   request.Content = new System.Net.Http.StringContent({JSONデータ}, Encoding.UTF8, "application/json");
   var res = await client.SendAsync(request);
}

HttpRequestMessageのContentオブジェクトとしてポストするJSONデータをEncodeとContent-Typeを指定して作成すればいいようです。

WebClientの時はheaders.Addで追加できていたので、その時の感覚でHttpClinetを利用して3時間ほどはまりました・・・。orz

コメント