![](/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.