ikarosの作業場

飛行機の設計もできる系のCshaper。「なおこの記事は個人的見解であり、所属する組織の意見とは一切関係がありません」と書かざるを得なくなった悲しみを知れ

C#基礎講座:HttpClient詳説

予備校が忙しすぎて一週間ほどポストしておりませんでした。
これからはもうちょっと更新頻度あげていきたいですね、はい。

では今回はWindows GUIに標準で搭載されたHttpClientについて解説したいと思います

注:今回使うアセンブリは「System.Net.Http」です。他のアセンブリのHttpClientクラスと混同なされませんようご注意ください

1.GETリクエストを送信する
HttpClientクラスのGetAsyncメソッドを用いてGETリクエストを送信することができます

//親となる呼び出しメソッドには非同期メソッドである必要があります(asyncが必要)
private async Task<string> getrequest()
{
     var client = new HttpClient();
     var response = new HttpResponseMessage();

     //awaitが前に必要、非同期処理であるという目印になります
     response = await client.GetAsync("送信先URL(string型でもUri型でもどちらでもよい)")
     string result = await response.Content.ReadAsString();
     return result;
}

旧世代のHttpリクエストの送信に比べてかなりすっきりとした構図である。といえます。

主な変化点、気を付ける点は
非同期処理であるということです
関数が返す型がTask型になります。何も返したくないときは"Task",何かしら返す時は"Task"と綴ります


2.POSTリクエストを送信する
送り付ける要求はSortedDictionary型で書き込みます

private async Task<string> postrequest()
     var client = new HttpClient();
     var response = new HttpResponseMessage();
     var content = new new FormUrlEncodedContent(new SortedDictionary<string, string>
     {
           //送り付けたいことを書く
     };
     
     response = await client.PostAsync("送信先URL(string型でもUri型でもどちらでもよい)",content)
     string result = await response.Content.ReadAsString();
     return result;

大体のことがこれで完了すると思います

最後に・・・
3.より指定が細かいリクエストを送信する
リクエストの送信にヘッダーが必要だったりストリーミングなど細かい設定が必要な場合はSendAsyncメソッドを用いて
より設定を細かく指定した送信をすることができます

今回は例としてGETリクエストを送信してみます

private async Task<string> sendrequest()
{
     var client = new HttpClient();
     var request = new HttpRequestMessage();

     request.Method = HttpMethod.Get;
     request.RequestUri = new Uri(posturl);

     //ホスト先の指定
     request.Headers.Host = "hoge";
     //認証ヘッダーの追加
     request.Headers.Authorization = new AuthenticationHeaderValue("hogehoge", "hogehoge");

     var response = await client.SendAsync(request);
     string result = await response.Content.ReadAsStringAsync();
     return result;
}
当サイトのソースコード及びその他の情報は個人・商用問わず自由に使っていただいてかかまいませんが、当サイトの情報が元で発生したいかなる結果・不利益については責任を負いかねますのでご了承ください