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
コメント