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

投稿者: | 2017年3月14日

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

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください