C#: HttpClientを使った様々なPOST送信サンプル

概要

  • HttpClientを使用して、テキスト、JSON、画像、マルチパートのコンテンツをHTTPで送信するサンプルを紹介します。
  • 使用環境は次の通りです。
    OSWindows 10(64ビット)
    IDEMicrosoft Visual Studio Community 2022(17.6.0)
    言語C#(10.0) + .NET6

サンプル

  • サンプルはgithubで公開しています。
  • ASP.NET(.NET6)では、IHttpClientFactoryから取得したHttpClientの使用が推奨されてるので、その想定の例になっています。詳細はリファレンスをご覧ください。
  • HTTP要求のイメージは、こちらで紹介している仕組みで文字列にダンプしています。
    (Hostヘッダは含まれていません。日本語を含む非印刷可能文字は.になっており、本稿では適当に間引いています。)
    NDW

    HttpClientで使用するHttpRequestMessage, HttpResponseMessageから生HTT…

フォームのPOST

  • FormUrlEncodedContentを使用してフォーム(キー=値)を送信できます。
  • 生成されるHTTP要求のイメージは次の通りです。

テキストのPOST

  • StringContentを使用してテキストを送信できます。
    コンテンツ内容としてJSON文字列、コンテンツタイプとして”text/json”を指定してJSONを送信することもできます。コンテンツタイプに関して、主要なものはmdn、完全なものはIANAをご覧ください。
  • 生成されるHTTP要求のイメージは次の通りです。

JSONのPOST

  • JsonContentを使用して、C#のオブジェクトから変換したJSONを送信できます。
    JsonSerializerでJSON文字列を生成し、前述のようにStringContentで送信することもできます。
    コンテンツタイプに関して、主要なものはmdn、完全なものはIANAをご覧ください。
  • 生成されるHTTP要求のイメージは次の通りです。

画像等のバイナリのPOST

  • バイト配列のコンテンツの場合、ByteArrayContentを使用して送信できます。
    必要に応じてコンテンツタイプを指定します。コンテンツタイプに関して、主要なものはmdn、完全なものはIANAをご覧ください。
  • ストリームのコンテンツの場合、StreamContentを使用して送信できます。
  • 生成されるHTTP要求のイメージは次の通りです。

マルチパートのPOST

  • MultipartFormDataContentを使用して、マルチパートのデータを送信できます。
    マルチパートには、前述のStringContent, StreamContent等のクラスを使用して様々なコンテンツを追加できます。
    コンテンツタイプに関して、主要なものはmdn、完全なものはIANAをご覧ください。
  • 生成されるHTTP要求のイメージは次の通りです。
    Content-Dispositionでファイル名を指定する場合、13行目のようにfilenameの値に引用符がない場合があり、一部のシステムではエラーになる場合があります。詳細はこちらをご覧ください。