HttpClient の StringContent は charset を付ける
Created at:
tl;dr
- .NET の
HttpClientのStringContentは自動でContent-Typeにcharset=<encoding>を付ける - 不要な場合は
StringContent.Headers.ContentTypeを手で設定しなおす必要がある
はじまり
HttpClient でとある API (POST) を呼び出すとなぜか動かない… curl で同じ内容を投げると動くのに…という相談を受けて、そんな不思議なことが?と思って調べてみたのが始まりでした。
.NET の HttpClient, StringContent は自動で charset を付ける
curl で動いているなら .NET の HttpClient が投げるものが何か違うのではと思って、リクエストやリクエストを作っているところを確認してみました。
|
StringContent クラスのコンストラクターのコードではメディアタイプとともに CharSet プロパティを設定したものをヘッダーの ContentType プロパティに設定しています。この CharSet プロパティは Content-Type の charset 指定になります。
つまり StringContent クラスを使って投げるリクエストを作るとデフォルトで application/json; charset=utf-8 のような Content-Type で送られるということになります。
ContentType を再設定する
charset パラメータが必ずついてしまうということが分かったので、付けずにリクエストを送信したいという場合にはこれを変える必要があります。
といってもやることは簡単で後から手動で ContentType プロパティを再設定してあげれば大丈夫です。
|