代码之家  ›  专栏  ›  技术社区  ›  Rast

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

  •  0
  • Rast  · 技术社区  · 7 年前

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

    我想访问请求上下文之类的内容 在控制器构造函数中 获取任意HTTP标头或 HttpContext.Items 或者类似的东西来创建我的 log .

    我试过使用 IHttpContextAccessor . 它给了我 DefaultHttpContext 不包含 Items 由中间件添加。

    我唯一能想象的就是 日志 控制器属性 public 然后写一个 IActionFilter 设置此属性。因为动作过滤器可以访问上下文和控制器实例。

    在我看来,在控制器构造函数中没有请求上下文看起来很奇怪,因为请求信息有助于避免操作中的样板代码。无论如何,控制器都是根据请求创建的,所以在构造函数中使用一些请求数据是无害的。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Zoltán Tamási    7 年前

    对于请求级日志记录,请使用 ActionFilter 吸引并注入 ILogger 对此。我不确定,但我认为在MVC 5+中,依赖注入在操作过滤器属性中是受支持的。如果不是,则不在中注册 GlobalFilters ,您可以实现 IFilterProvider 用于将属性附加和实例化到您想要的请求。

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