C#

【C#】HttpClientの使い方 POST/GET

HttpClientとは何か

HttpClientクラス(System.Net.Http)は、C#でHTTP要求を行う場合に利用します。
他にもHTTP要求を行うためのWebClientクラスがありますが、HttpClientを使うことがMicrosoftからも推奨されています。

https://docs.microsoft.com/ja-jp/dotnet/api/system.net.http.httpclient?view=net-6.0

HttpClientの使い方

APIのサンプルを公開しているサイトがあるため、こちらを利用します。

https://www.umayadia.com/Note/Note028WebAPISample.htm

GET

GETの場合は、GetAsync メソッドを使います。
※例に使うAPIのGET仕様は登録されているすべてのデータをJSONで返却します。

using System;
using System.Net.Http;
using System.Threading.Tasks;

var client = new HttpClient();
var result = await client.GetAsync(@"https://umayadia-apisample.azurewebsites.net/api/persons");
var json = await result.Content.ReadAsStringAsync();
Console.WriteLine($"{(int)result.StatusCode} { result.StatusCode }");
Console.WriteLine(json);

以下の通り、JSON文字列で返却されたことが確認できました。

POST

POSTの場合は、Postasync メソッドを使います。
※例に使うAPIのPOST仕様はJSONでpersonオブジェクトを渡して、データを登録します。

using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Text;

var param = new Dictionary<string, object>()
{
    ["name"] = "ぺんた",
    ["note"] = "大阪府出身",
    ["age"] = 30,
    ["registerDate"] = "2021-12-01",
};
var jsonString = System.Text.Json.JsonSerializer.Serialize(param);
var content = new StringContent(jsonString, Encoding.UTF8, @"application/json");
//POST
var result = await client.PostAsync(@"https://umayadia-apisample.azurewebsites.net/api/persons", content);
Console.WriteLine($"{(int)result.StatusCode} { result.StatusCode }");
Console.WriteLine(result.StatusCode);

//GET
var resultGet = await client.GetAsync(@"https://umayadia-apisample.azurewebsites.net/api/persons");
var json = await resultGet.Content.ReadAsStringAsync();
Console.WriteLine($"{(int)resultGet.StatusCode} { resultGet.StatusCode }");
Console.WriteLine(json);

POSTした後にGETで登録されているか確認します。
すると、以下の通り登録されていることが確認できました。

HttpClientを使って画像をダウンロード

HttpClientを使って画像をダウンロードする処理を作ってみました。
imgUriに画像パスを、fileNameに保存するファイル名を渡すと、D:\Image に保存します。

using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

public class MyHttpClinet 
{
    private static HttpClient Client = new HttpClient();

    public async Task DownloadImgAsync(string imgUri, string fileName)
    {
        //GET
        var res = await Client.GetAsync(imgUri);

        var date = DateTime.Today.ToString("yyyy_MM_dd");
        //保存先ディレクトリ
        var directory = $@"D:\Image\{date}";
        //存在しなければディレクトリ作成
        if (!Directory.Exists(directory))
        {
            Directory.CreateDirectory(directory);
        }
        //fileName + .jpg で保存
        using (var fileStream = File.Create($@"{directory}\{fileName}.jpg"))
        {
            using (var httpStream = await res.Content.ReadAsStreamAsync())
            {
                httpStream.CopyTo(fileStream);
            }
        }
    }
}
エンジニアの転職ならこれ!

【第二新卒向け】マイナビジョブ20's

マイナビジョブ20'sは、20代・第二新卒・既卒向けの転職エージェントです。

▼こんな方におすすめ
・はじめて転職しようと思っている
・転職できるだけのスキルが自分にあるか不安
・手厚いサポートを受けたい

【フリーランス向け】安心保障と豊富な案件紹介 Midworks

Midworksは豊富な案件と「フリーランス」と「正社員」の良いとこ取りをした働き方を実現する手厚い保障が特徴です。

▼こんな方におすすめ
・現在正社員でフリーランスになろうか悩んでいる
・フリーランスとして働いているが、先行きが不安がある  (安定的な案件確保や保障など)
・自分の市場価値を知りたい、見合った案件で参画したい
・今後のキャリアビジョンを踏まえて案件を選びたい

【未経験向け】自宅で現役エンジニアから学べる TechAcademy

テックアカデミーは、現役エンジニアから学べるオンラインに特化したプログラミングスクールです。
講師は全員、通過率10%の選考に合格した現役エンジニア。
確かなスキルをもとに受講生をマンツーマンサポートします。


▼こんな方におすすめ
・自宅にいながらオンライン完結で勉強できる
・受講生に1人ずつ現役エンジニアのパーソナルメンターが専属でつく
・チャットで質問すればすぐに回答が返ってくる
・オリジナルサービスやオリジナルアプリなどの開発までサポート