繁体   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