我有一个 .Net Core 项目需要连接约4个不同的API服务,虽然我对HttpClient代码并不是很熟悉,但从我找到的资料来看,通常情况下你只想重用一个HttpClient实例。据我所知,.Net Core中普遍认为应该使用HttpClientFactory,在启动类中注册并通过DI请求。
现在除了BaseAddress url之外,我的大多数默认标头和类似内容都是相同的,那么当连接到4个不同的API服务时,我该如何处理呢?我应该注册4个不同的命名客户端还是拥有一个已预设所有默认信息的客户端,然后根据需要手动进行配置,例如配置地址?
通常问题是,因为我还比较新手,所以应该重复使用一个HttpClient实例。
- 如果我为每个API服务创建4个不同的命名客户端,那么当我调用.CreateClient()方法时,这是否会创建4个HttpClient实例?
- .CreateClient()每次被调用时都会创建一个新的实例,如果我需要对同一个API服务进行3个不同的调用,每个调用都将调用.CreateClient()建立某种连接,那么这不就打败了只保留一个HttpClient实例的目的吗?
感谢任何有助于澄清的帮助,
谢谢!
IHttpClientFactory
,并在调用factory.CreateClient()
时添加标头,或者创建一个包含所需标头的命名客户端,并使用factory.CreateClient("namedclient")
,两种方法都非常简单,选择哪一种几乎没有任何区别。 - TheGeneralIHttpClientFactory
是对普通HttpClient
存在的所有问题进行改进的。简而言之,您可以安全地调用CreateClient
多次,并在底层为您处理所有操作(实际上这是推荐的方式,除非您有一个非常特定的使用情况),无需缓存客户端,所有生成的客户端都是线程安全的。 - TheGeneralIHttpClientFactory.CreateClient
文档的备注中可知:每次调用CreateClient(String)
都会返回一个新的HttpClient
实例。调用者可以无限期地缓存返回的HttpClient
实例或在需要时使用 using 块将其处理掉。默认的IHttpClientFactory
实现可能会缓存底层的HttpMessageHandler
实例以提高性能。 调用者也可以自由地改变返回的HttpClient
实例的公共属性。(强调为我)。 - CoolBots