![](/img/trans.png)
[英]ASP.NET Core Access User.Identity in Controller Constructor
[英]ASP.NET Core controller constructor: access request information
我有一個帶有ILog log
字段的基本控制器類,該字段是通過自定義記錄器服務在構造函數中設置的,並通過依賴項注入傳遞。
我想訪問控制器構造函數中的請求上下文之類的東西,以獲取任意的HTTP標頭或HttpContext.Items
或類似的東西在創建log
時使用它。
我嘗試使用IHttpContextAccessor
。 它為我提供了DefaultHttpContext
,它不包含中間件添加的Items
。
我唯一能想到的就是public
控制器的log
屬性,並編寫一個設置該屬性的IActionFilter
。 因為操作過濾器可以訪問上下文和控制器實例。
在控制器構造函數中沒有請求上下文對我來說很奇怪,因為請求信息對於避免動作中的樣板代碼很有用。 無論如何,控制器都是針對每個請求創建的,因此在構造函數中使用一些請求數據不會造成任何危害。
對於請求級別的日志記錄,請使用ActionFilter
屬性並向其中注入ILogger
。 我不確定,但是我認為在MVC 5+中,動作過濾器屬性支持依賴項注入。 如果不是,則可以實現IFilterProvider
來代替在GlobalFilters
中注冊,以將屬性附加和實例化到您想要的請求。
另一方面,如果您需要任何類型的業務級別日志記錄(例如在操作主體內部),請在控制器中使用注入的ILogger
,但是在流程位於操作內部之前,您不應調用任何日志記錄邏輯。 屆時,您將已經擁有一個構建請求上下文。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.