ASP.NET核心控制器构造函数:访问请求信息

时间:2017-12-11 14:54:10

标签: c# dependency-injection asp.net-core-mvc-2.0

我有一个带有ILog log字段的基本控制器类,它是在自定义记录器服务的构造函数中设置的,通过依赖注入传递。

我想在控制器构造函数中访问请求上下文以获取任意HTTP标头或HttpContext.Items或类似内容,以便在创建{{1}时使用它}。

我尝试使用log。它为我提供了IHttpContextAccessor,其中不包含由中间件添加的DefaultHttpContext

我能想象的唯一一件事就是设置控制器Items的{​​{1}}属性并编写一个设置此属性的log。因为操作过滤器可以访问上下文和控制器实例。

在控制器构造函数中没有请求上下文对我来说看起来很奇怪,因为请求信息对于避免操作中的样板代码很有用。无论如何,每个请求都会创建控制器,因此在构造函数中使用某些请求数据没有坏处。

1 个答案:

答案 0 :(得分:0)

对于请求级别日志记录,请使用ActionFilter attrbute并为其注入ILogger。我不确定,但我认为在MVC 5+中,动作过滤器属性支持依赖注入。如果没有,您可以实施GlobalFilters,而不是在IFilterProvider中注册,以便将属性附加并实例化到您想要的请求中。

另一方面,如果您需要任何类型的业务级别日志记录(例如在操作体内),请使用控制器中注入的ILogger,但是之后不应调用任何日志记录逻辑进程在一个动作中。那时你已经有了一个建立的请求上下文。