c# - 如何为通过 HttpClientFactory 直接创建的 HttpClient 配置 Web 代理?
问题描述
- 直接我的意思是没有 Asp.Net Core IoC/DI 助手。
我没有找到有关它的文档,并且我认为我当前的解决方案不是最佳的,因为处理程序生命周期不是由 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);
返回的客户端将使用带有代理的处理程序。
推荐阅读
- jpa - 如何查找名称中包含所有字符序列的所有员工?
- sql-server - EF Core 3.1 - Database scalar function - string.Join
- azure-devops - How to pick the correct path of artifacts after deploying to deployment group in azure devops
- visual-studio-code - How can I work on the same code with my friend in vs code?
- flutter - How to format body for form-data header
- jackson - 不要在页面吊索导出器中包含组件吊索导出器数据 - AEM
- r - R 边距:维度数不正确
- angular - Angular for 循环进行 http 调用 - 等待上一个调用完成,然后再进行下一个
- python - 如何使用 plotly 绘制特定行的散点图
- java - 如何使用 Jackson JsonGenerator 将列表添加到 JSON