.net core HttpClient,似乎很难正确使用它

.net core HttpClient,似乎很难正确使用它,.net-core,httpclient,.net Core,Httpclient,还有一个问题是关于HttpClient的正确用法,因为除非我遗漏了什么,否则我会在Microsoft文档中找到关于HttpClient的矛盾信息。这两个环节是我困惑的根源: 第一个声明最佳方法是共享单例HttpClient实例,第二个声明AddHttpClient()将服务注册为瞬态,更具体地说(从该URL复制): 类型化客户端在DI中注册为瞬态。在前面 代码,AddHttpClient将GitHubService注册为临时服务。 此注册使用工厂方法来: 创建HttpClient的实例 创建

还有一个问题是关于
HttpClient
的正确用法,因为除非我遗漏了什么,否则我会在Microsoft文档中找到关于
HttpClient
的矛盾信息。这两个环节是我困惑的根源:

  • 第一个声明最佳方法是共享单例
    HttpClient
    实例,第二个声明
    AddHttpClient()
    将服务注册为瞬态,更具体地说(从该URL复制):

    类型化客户端在DI中注册为瞬态。在前面 代码,
    AddHttpClient
    GitHubService
    注册为临时服务。 此注册使用工厂方法来:

  • 创建
    HttpClient
    的实例
  • 创建
    GitHubService
    的实例,将
    HttpClient
    的实例传递给其构造函数
  • 我一直在使用
    AddHttpClient()
    ,感觉很安全,但现在我又困惑了。。。更糟糕的是,我在@rynowak中发现了这样一个说法:

    如果你正在建立一个图书馆,你计划分发,我会 强烈建议你不要依赖别人
    IHttpClientFactory
    ,并让您的消费者通过
    HttpClient
    实例

    为什么这对我很重要?因为,我正在创建一个图书馆,主要做两件事:

  • 从令牌服务检索访问令牌(
    IdentityServer4
  • 使用该令牌访问受保护的资源
  • 我遵循上述类型化客户端方法:

    //来自https://github.com/georgekosmidis/IdentityServer4.Contrib.HttpClientService/blob/master/src/IdentityServer4.Contrib.HttpClientService/Extensions/ServiceCollectionExtensions.cs
    services.AddHttpClient()
    .SetHandlerLifetime(TimeSpan.FromMinutes(5));
    
    任何关于基于
    HttpClient
    的具体实现的建议或示例都是非常受欢迎的


    谢谢大家!

    类型化的客户端被注入为瞬态,但其内部的
    HttpClient
    可能不是。感谢David的回答,但文档中声明:“此注册使用工厂方法:1.创建HttpClient的实例。2…”。你的意思是这没有很好的文档记录,实际上只创建了一个实例,然后重新使用?请查看此线程以获取详细答案: