【问题标题】:Do I need to add all HttpClients?我需要添加所有 HttpClients 吗?
【发布时间】:2023-02-03 17:29:47
【问题描述】:

如果我在单例中使用_httpClientFactory.CreateClient()(客户端没有名称,我在使用时设置它)

我应该在启动时添加/指定一个空的 services.AddHttpClient(); 还是没有必要?

【问题讨论】:

  • 好吧,services.AddHttpClient() 向容器注册了IHttpClientFactory……我想知道你为什么不简单地尝试一下?

标签: c# .net-core httpclient


【解决方案1】:

services.AddHttpClient();在您的启动类中用于配置 IHttpClientFactory 实例, 然后用于创建和管理命名的 HttpClient 实例。

如果您直接使用 _httpClientFactory.CreateClient() 创建 HttpClient 的实例,而不指定命名的客户端,

我的建议是你不需要添加 services.AddHttpClient(); Startup 类中的行。

事实: 仅当您计划使用 IHttpClientFactory 来创建命名的 HttpClient 实例时,此行才是必需的。

更多访问:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-7.0

【讨论】:

    【解决方案2】:

    ;你应该只在启动时指定空的services.AddHttpClient();。如果你想配置“特定的”HttpClient,你可以传递它 name 参数,你稍后将通过名称调用(例如添加基地址或标题)。否则IHttpClientFactory会给你一个没有配置的(比如调用new HttpClient()

    例如:

    services.AddHttpClient("MyApiClient").ConfigureHttpClient(client =>
    {
        client.BaseAddress = new Uri(configuration["MyApiUrl"]);
    });
    

    然后像这样调用工厂:

    _httpClientFactory.CreateClient("MyApiClient");
    

    会给你 HttpClient 配置的基址。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多