我想將 a 配置HttpClient為具有由異步呼叫產生的默認授權標頭,如下所示:
builder.Services.AddHttpClient("client", (serviceProvider, client) =>
{
client.DefaultRequestHeaders.Authorization =
serviceProvider.GetService<IAuthProvider>()?.GetAuthHeaderAsync().Result;
});
可以呼叫Task.Result不支持異步委托的配置方法嗎?或者我應該這樣做:
builder.Services.AddHttpClient("client", async (serviceProvider, client) =>
{
client.DefaultRequestHeaders.Authorization =
await serviceProvider.GetService<IAuthProvider>()?.GetAuthHeaderAsync();
});
- 當我執行第二個選項時,我收到警告:當委托型別回傳 'void' 時避免使用 'async' lambda
uj5u.com熱心網友回復:
依賴注入是“一直使用異步”一般建議不適用的地方,因為沒有 DI/IoC 容器支持異步決議。
解決此問題的一種方法是使用“異步工廠”型別;即,您定義了一個HttpClient可以按需異步生成客戶端的工廠。
另一種方法是同步進行 DI/IoC 注入,通常在應用程式實際啟動之前,在啟動時阻塞所有異步構造。
最后一種方法更高級:您定義一個包含您需要的所有 API 的型別(使用異步簽名),并將異步初始化隱藏在該型別中的異步延遲(或單項異步快取)后面。
關于您的特定用例,身份驗證標頭是否只請求一次,并且對于應用程式的其余部分保持不變?如果是這樣,我會說只是在啟動時同步阻止它。如果它是可以更改的,那么您最好將身份驗證作為訊息處理程式來處理,而不是在構建客戶端時。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/511761.html
標籤:C#多线程asp.net 核心asp.net-web-api
上一篇:如何獲得年總銷售額
