我有這個類,它從 Header 獲取 Authorization Header 值并將其存儲到變量中,如下所示:public class AuthenticationHeader{ private static IHttpContextAccessor _httpContextAccessor; public AuthenticationHeader(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } public string AuthHeader => _httpContextAccessor.HttpContext?.Request.Headers["Authorization"]}我已經像這樣在我的 DI 中注冊了這個課程Startup.csservices.AddScoped<AuthenticationHeader>();然后使用構造函數注入在我的 NetworkClient 中使用此類。public ClubMatasClient(HttpClient client, ILogger<ClubMatasClient> logger, AuthenticationHeader authHeader){ _client = client; client.BaseAddress = new Uri("url"); client.DefaultRequestHeaders.Add("Accept", "application/json"); _logger = logger; AuthToken = authHeader.AuthHeader;}我已經閱讀了此處文檔的生命周期,Scoped但我很困惑應該使用哪一個。我不想混合我的請求標頭中的身份驗證標頭。Transient
1 回答

呼啦一陣風
TA貢獻1802條經驗 獲得超6個贊
Scoped 是每個 http 請求,Transient 是每個類型。
由于您的授權標頭是針對每個請求的,因此您可以將AuthenticationHeader
類注冊為 Scoped,這意味著為滿足您的請求而創建的所有類型都將獲得相同的實例。
但是您也可以將其注冊為 Transient,然后為您請求服務而創建的所有類型都將獲得內部使用 IHttpContextAccessor 的新實例,AuthenticationHeader
這將為您的 http 請求提供相同的 HttpContext。
所以你可以兩者都用,唯一要考慮的是內存消耗。作用域將使用更少的內存。
編輯: 實際上你也可以使用 Singleton 因為IHttpContextAccessor
注冊為 Singleton 并且在內部它使用 AsyncLocal 來存儲當前上下文。但我不推薦它,因為將來AuthenticationHeader
可以使用一些會破壞行為的額外邏輯來擴展。
- 1 回答
- 0 關注
- 87 瀏覽
添加回答
舉報
0/150
提交
取消