deezus blog

.Net Core、Typescriptを中心に技術的ノウハウを公開しています

.NETCore2.2と3.0のHttpClientの挙動の違い

はじめに

先日.NETCore3.0がリリースされました
それに伴い、.NETCore2.2で作成したWEBアプリを3.0にアップグレードしましたが、HttpClientで別サイトからデータを取得する部分でエラーが発生するようになりました。

var httpClient = new HttpClient(httpClientHandler);
var response = await httpClient.GetAsync("url");

原因

環境変数のhttp_proxyとhttps_proxyの値をプロキシとしてHttpClientが使用していたのが原因でした
※当該URLにはプロキシを使用せずにアクセスする必要がありました

対策

手っ取り早い対策は環境変数を削除することですが、gitやnpmなどで使用しているので却下
(2019/10/24追記) NO_PROXYに除外したいホストを追加すればプロキシを使用せずに直接接続します

今回は下記のようにコードを書き換えることで対応しました

var httpClientHandler = new HttpClientHandler(){
    Proxy = new WebProxy()
};
var httpClient = new HttpClient(httpClientHandler);
var response = await httpClient.GetAsync("url");

ASP.NETCoreでDIする場合はStartup.csのConfigureServicesで下記のように変更します

services.AddHttpClient().ConfigurePrimaryHttpMessageHandler(x => new HttpClientHandler{ Proxy = new WebProxy() });