簡體   English   中英

ASP.NET Core控制器構造函數:訪問請求信息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM