【问题标题】:adding a handler to all clients created via IHttpClientFactory?向通过 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();

【问题讨论】:

    标签: c# asp.net-core dotnet-httpclient httpclientfactory


    【解决方案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 确实用作默认名称。
    • 有人想出一种方法来使用打字客户端吗?似乎不适合那些人
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    相关资源
    最近更新 更多