tekitoumemo’s diary

思ったことを書くだけ。長文版Twitter

.net coreでHttpClient

https://4.bp.blogspot.com/-iQ7CUthzPg8/UdYhKuwNgrI/AAAAAAAAV5k/o0tEGbK-PwI/s400/tatemono_koujou.png

HttpClientFactoryについて

めっちゃ内容薄い、他のブログ見た方が良いかも

HttpClientがとりあえずひどい作りなので、HttpClientFactoryってものがあります。HttpClientのひどい設計をカバーしたものがHttpClientFactoryです。名前もひどいもんですね。

HttpClientの何がダメなのか?

「ソケット枯渇して色々バグあるよー」ってやつです。詳しくは以下を見てください。
www.infoq.com
docs.microsoft.com
.Net Frameworkではシングルトンにして対応する必要がありました。知らなかったけど

HttpClientFactoryを使うとどうなのか?

「ソケット枯渇しないしバグもないよ!」ってやつです。詳しくは以下を見てください。
.NETのHttpClientの修正

使い方

nuget

dotnet add package Microsoft.Extensions.Http --version 2.1.1

最新が14日前でそろそろ2.2.0がリリースされると思います。

DI

public void ConfigureServices(IServiceCollection services)
{
    // これ
    services.AddHttpClient();
           
    services.AddMvc();
}
これ

Constructor Injection

public class HomeController : Controller
    {
        private readonly IHttpClientFactory _httpClientFactory;

        public HomeController(IHttpClientFactory httpClientFactory)
        {
            _httpClientFactory = httpClientFactory;
        }
}

使いたいところで注入。

GETする

var client = _httpClientFactory.CreateClient();
var result = await client.GetStringAsync({URL});

clientはHttpClientなのでいつも通りに使えばおっけいです。

そもそもHttpClientを普通に使えないのが謎ですが、まぁこんなライブラリもありますって内容でした。