向通过 IHttpClientFactory 创建的所有客户端添加处理程序?

Posted

技术标签:

【中文标题】向通过 IHttpClientFactory 创建的所有客户端添加处理程序?【英文标题】:adding a handler to all clients created via IHttpClientFactory? 【发布时间】:2019-07-27 19:24:50 【问题描述】:

有没有办法向 IHttpClientFactory 创建的所有客户端添加处理程序?我知道您可以在指定客户端上执行以下操作:

services.AddHttpClient("named", c =>

    c.BaseAddress = new Uri("TODO");
    c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    c.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue
    
        NoCache = true,
        NoStore = true,
        MaxAge = new TimeSpan(0),
        MustRevalidate = true
    ;
).ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler

    AllowAutoRedirect = false,
    AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip
);

但我不想使用命名客户端我只想为通过以下方式返回给我的所有客户端添加一个处理程序:

clientFactory.CreateClient();

【问题讨论】:

【参考方案1】:

当您使用不带参数的CreateClient 时,您implicitly 请求一个命名客户端,其中名称为Options.DefaultName (string.Empty)。要影响此默认实例,请在调用AddHttpClient时指定Options.DefaultName

services.AddHttpClient(Options.DefaultName, c =>

    // ...
).ConfigurePrimaryHttpMessageHandler(() =>

    // ...
);

Tobias J 在 cmets 中指出,AddHttpClient 的 API 文档声明如下:

使用DefaultName 作为名称来配置默认客户端。

【讨论】:

@janw documentation 用于带有名称参数的 AddHttpClient 重载指定 Options.DefaultName 确实用作默认名称。 有人想出一种方法来使用打字客户端吗?似乎不适合那些人

以上是关于向通过 IHttpClientFactory 创建的所有客户端添加处理程序?的主要内容,如果未能解决你的问题,请参考以下文章

《ASP.NET Core 6框架揭秘》实例演示[17]:利用IHttpClientFactory工厂来创建HttpClient

在 ASP.NET Core 中使用 IHttpClientFactory 发出 HTTP 请求

通过 IHttpClientFactory 忽略 SSL 连接错误

如何在ASP.NET Core 中使用IHttpClientFactory

转.NET Core开发日志——IHttpClientFactory

IHttpClientFactory 并更改基础 HttpClient.BaseAddress