6.20HttpClient 实例配置

HTTP 远程请求服务内部采用 HttpClient 发送请求。通过配置 HttpClient 客户端,可以调整框架发送 HTTP 远程请求的行为。您可以通过以下两种方式配置客户端行为:

HttpClient 实例配置 ✨#

HTTP 远程请求服务内部采用 HttpClient 发送请求。通过配置 HttpClient 客户端,可以调整框架发送 HTTP 远程请求的行为。您可以通过以下两种方式配置客户端行为:

全局配置

Startup.csProgram.cs 中配置所有请求或特定名称的客户端:

cs
// 为默认客户端启用services.AddHttpClient(string.Empty, client => {});// 为特定客户端启用services.AddHttpClient("weixin", client => {});// 若需解析服务,可使用以下重载方法services.AddHttpClient(string.Empty, (serviceProvider, client) => {});

单请求配置

使用 SetHttpClientProvider 为特定请求自定义客户端:

cs
HttpRequestBuilder.Get("https://furion.net/")    .SetHttpClientProvider(() => (new HttpClient(new HttpClientHandler    {        // ...    }), client => client.Dispose()));

常见属性配置#

cs
// 为默认客户端启用services.AddHttpClient(string.Empty, client =>{    // 配置基地址    client.BaseAddress = new Uri("http://localhost:5000");    // 配置超时    client.Timeout = TimeSpan.FromMinutes(10);    // 配置响应内容的最大缓存字节数    client.MaxResponseContentBufferSize = 5 * 1024;    // 配置默认 HTTP 版本    client.DefaultRequestVersion = HttpVersion.Version10;    // 配置默认请求标头,如 "User-Agent"    client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 Edg/142.0.0.0");    // 配置默认建立 HTTP 连接时使用的版本策略    client.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrHigher;});// 为特定客户端启用services.AddHttpClient("weixin", client =>{    // 配置 HttpClient 属性});

配置 IHttpClientBuilder#

.AddHttpClient(name, configure) 方法返回一个 IHttpClientBuilder 实例,允许进行进一步的配置,比如设置 HttpMessageHandler

配置默认和特定客户端的示例#

cs
// 配置默认客户端services.AddHttpClient(string.Empty, client => {})    .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler    {        // 允许自动重定向        AllowAutoRedirect = true,        // 使用默认凭据        UseDefaultCredentials = true,        // 启用 Cookie        UseCookies = true,    });// 配置名为 "weixin" 的特定客户端services.AddHttpClient("weixin", client => {})    .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler());

统一配置所有 HttpClient 实例#

除了单独配置每个客户端,您还可以统一配置所有 HttpClient 实例:

cs
services.ConfigureHttpClientDefaults(clientBuilder =>{    clientBuilder.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler());});// 或使用 IHttpRemoteBuilder 扩展方法进行一键配置services.AddHttpRemote()    .ConfigureHttpClientDefaults(clientBuilder =>    {        clientBuilder.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler());    });

这样的配置方式使代码更加简洁和模块化,便于维护和管理。