【发布时间】:2020-06-01 19:34:47
【问题描述】:
IHttpClientFactory 和更改 HttpClient.BaseAddress 的最佳做法是什么?
在创建我的依赖注入时,我这样做:
services.AddHttpClient("MyApp", c =>
{
c.BaseAddress = new Uri("https://myurl/");
c.DefaultRequestHeaders.Add("Accept", "application/json");
}).ConfigurePrimaryHttpMessageHandler(handler => new HttpClientHandler()
{ AutomaticDecompression = DecompressionMethods.GZip });
然后当我需要一个 HttpClient 这样做时:
var client = clientFactory.CreateClient("MyApp");
这很好用,但有时在运行时需要更改 BaseAddress。在运行期间,我无法在注入后更改 BaseAddress。现在我可以完全忽略 BaseAddress 并在 API 调用中发送整个地址,但是,我不知道这是否是正确的做法。像这样的:
await using var stream = await client.GetStreamAsync($"{addresss}/{api}");
using var streamReader = new StreamReader(stream);
using var textReader = new JsonTextReader(streamReader);
var serializer = new JsonSerializer();
data = serializer.Deserialize<List<T>>(textReader);
【问题讨论】:
-
几个想法,我可以发誓注入后基地址是可配置的,但如果不是,您可能希望使用两个客户端并将
CreateClient移动到更靠近您需要特定基地址的位置并使用你在那里的第二个客户。只是一些想法 -
@JSteward 当我从直接 HttpClient 切换到 IHttpClientFactory 时,我无法更改 BaseAddress。不需要有两个客户端,基本上,该应用程序允许在运行时更改配置。
标签: c# wpf dependency-injection dotnet-httpclient