それに関するドキュメントは見つかりませんでした。ハンドラのライフサイクルがHttpClientFactoryによって管理されていないため、現在のソリューションは最適ではないと思います。
var proxiedHttpClientHandler = new HttpClientHandler() { Proxy = httpProxy };
_createHttpClient = () => HttpClientFactory.Create(proxiedHttpClientHandler);
より良い解決策はありますか?
クライアントをサービスコレクションに追加すると、そこでハンドラーを構成できるはずです。
名前付きクライアントのアプローチを使用して、定数を使用してクライアント名を保持します。
public static class NamedHttpClients {
public const string ProxiedClient = "ProxiedClient";
}
そこからは、クライアントを構成するだけです
//...
var serviceCollection = new ServiceCollection();
serviceCollection
.AddHttpClient(NamedHttpClients.ProxiedClient)
.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler() {
Proxy = httpProxy
});
var services = serviceCollection.BuildServiceProvider();
そのため、解決されたIHttpClientFactory
を介してクライアントを呼び出すとき
var httpClientFactory = services.GetService<IHttpClientFactory>();
var client = httpClientFactory.CreateClient(NamedHttpClients.ProxiedClient);
返されたクライアントは、プロキシでハンドラを使用します。
あなたはこのようなことをすることができます:
private HttpClient ClientFactory()
{
var proxiedHttpClientHandler = new HttpClientHandler(){ UseProxy = true};
proxiedHttpClientHandler.Proxy = new WebProxy("proxy address");
var httpClient = new HttpClient(proxiedHttpClientHandler)
{
BaseAddress = new Uri("uri");
Timeout = 2000; //if you need timeout;
}
}
_createHttpClient = () => ClientFactory();
ファクトリーの使用と手動によるhttpClientオブジェクトのインスタンス化について、良い議論があります here 。