【发布时间】:2017-08-08 01:43:03
【问题描述】:
我正在使用 ASP.Net 核心,并且我需要访问业务逻辑类(不是控制器或操作)中的特定 HTTP 标头。
为了提供此处配置的全貌,我有一个自定义的 ASP.Net Core 中间件,它基于某些逻辑将一个值添加到自定义 HTTP 标头中,我需要访问此标头中的值业务逻辑类。
目前我实现这一点的方法是注入一个 HttpContextAccessor,使用以下 DI 注册。
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
在需要访问 HTTP 标头的类中,然后我使用构造函数注入请求 IHttpContextAccessor 并使用它来访问相关的 HTTP 标头。
执行上述操作很好,并给了我所需的结果,查看 Internet 上的各种文章,但普遍的共识似乎是避免在 ASP.Net Core 中使用 HttpContext.Current。
如果是上述情况,我的业务逻辑类是否有更好的方法来访问我的自定义中间件插入自定义 HTTP Header 的值?
我应该清楚,虽然目前中间件将所需的值存储在 HTTP 标头中以供业务逻辑类使用,但我对中间件的其他方法持开放态度,使业务逻辑类可以使用所需的值有更好的方法。
如有任何问题或澄清,请告诉我。
【问题讨论】:
-
某些实现需要访问上下文以获取值。但是,这不应该是业务层。创建一个提供所需标头值的服务。该类将采用上下文。然后类抽象将成为您的业务类的依赖项
-
实际上 - 它是一个服务类,目前正在上下文中。我应该在这里更具体一些,但是通过引用一个业务逻辑类,我真的只是想清楚地表明这不是一个控制器或动作。所以一般来说,传递一个访问 HTTP 上下文的服务似乎是你推荐的?
标签: asp.net-core asp.net-core-mvc .net-core asp.net-core-webapi