【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);
            }
        }
    }
}

Leave a Reply

Your email address will not be published. Required fields are marked *