[英]IHttpClientFactory and changing the base HttpClient.BaseAddress
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);
有時,在運行時 BaseAddress 需要更改。 在運行期間,我無法在注入后更改 BaseAddress。
在發送第一個請求之前,可以更改BaseAddress
。 此時,它被鎖定,無法再次更改。 HttpClient
工廠模式假定每個注入的客戶端只有一個BaseAddress
(可能未設置)。
現在我可以完全忽略 BaseAddress 並在 API 調用中發送整個地址,但是,我不知道這是否是正確的做法。
您的選擇是:
BaseAddress
一個。 如果您有一些知名主機,這是正常的方法。BaseAddress
,在每個調用中傳遞整個 url 。 這是完全允許的。IHttpClientFactory
傳遞HttpClient
實例,其中每個實例都可以指定自己的BaseAddress
。 如果您有一些需要BaseAddress
的代碼(例如 Refit)但需要將其與動態主機一起使用,我只會使用這種更復雜的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.