.NET Core 2.0中HttpClient如何使用系统默认代理?
.NET Core 2.0 中让 HttpClient 使用系统默认代理的解决方案
我之前也踩过这个坑!在.NET Framework里靠web.config几行配置就能搞定的默认代理,到了.NET Core 2.0确实得换个思路——因为Core不再自动读取web.config里的<defaultProxy>节点了。下面分享两种亲测有效的方法:
方法一:手动配置 HttpClientHandler
每次创建HttpClient的时候,直接给它指定带代理配置的Handler:
// 创建带代理设置的Handler var handler = new HttpClientHandler { // 获取系统默认代理 Proxy = HttpClientHandler.DefaultProxy, // 使用当前用户的凭据访问代理(如果代理需要认证的话) UseDefaultCredentials = true }; // 用这个Handler初始化HttpClient var httpClient = new HttpClient(handler);
这样你的HttpClient请求就会自动走系统配置的默认代理了。
方法二:全局DI配置(适合ASP.NET Core项目)
如果是ASP.NET Core项目,推荐通过依赖注入全局配置,不用每次创建HttpClient都重复写代码:
在Startup.cs的ConfigureServices方法里添加:
services.AddHttpClient("DefaultProxyClient") .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler { Proxy = HttpClientHandler.DefaultProxy, UseDefaultCredentials = true });
之后在需要用的地方,直接注入IHttpClientFactory来获取配置好的HttpClient:
private readonly IHttpClientFactory _httpClientFactory; public YourService(IHttpClientFactory httpClientFactory) { _httpClientFactory = httpClientFactory; } public async Task DoRequest() { var client = _httpClientFactory.CreateClient("DefaultProxyClient"); // 发起请求... }
补充说明
- 如果你系统的代理不需要认证,
UseDefaultCredentials可以不用设置,但加上也不会有问题; - 不管是控制台应用还是ASP.NET Core项目,这两种方法都适用,核心就是通过
HttpClientHandler.DefaultProxy获取系统代理并配置给HttpClient。
内容的提问来源于stack exchange,提问作者coolcake
相关产品推荐
相关产品推荐

