在ASP.Net核心业务逻辑中访问HTTP标头

时间:2017-03-16 18:01:11

标签: asp.net-core asp.net-core-mvc .net-core asp.net-core-webapi

我正在使用ASP.Net核心,我需要访问业务逻辑类中的特定HTTP标头(而不是控制器或操作)。

为了提供这里的配置的完整图片,我有一个自定义ASP.Net核心中间件,它基于某些逻辑将一个值添加到自定义HTTP标头中,它是我需要访问的此标头中的值业务逻辑类。

目前,我实现此目的的方法是使用以下DI注册注入HttpContextAccessor。

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

在需要访问HTTP标头的类中,然后使用构造函数注入请求IHttpContextAccessor并使用它来访问相关的HTTP标头。

上述工作正常并给我提供了我需要的结果,查看了互联网上的各种文章,但普遍的共识似乎是避免在ASP.Net Core中使用HttpContext.Current。

如果是这种情况,我的业务逻辑类是否有更好的方法来访问我的自定义中间件插入自定义HTTP标头的值?

我应该清楚,虽然目前中间件将所需的值存储在HTTP头中以供业务逻辑类使用,但我对中间件的其他方法持开放态度,使得业务逻辑类可以使用所需的值。有更好的方法。

如有任何问题或澄清,请告知我们。

1 个答案:

答案 0 :(得分:2)

ASP.Net Core中没有HttpContext.Current,因此很容易避免使用它。如果需要,您必须实现自己的扩展方法,但.Net Core社区的一般感觉是使用IHttpContextAccessor要好得多。

在早期版本的.Net Core中,IHttpContextAccessor的实现已在DI容器中自动注册。在更新的版本中,您必须使用您提到的代码行自行注册:

 services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

IHttpContext注入需要访问标头的方法是一种可行的方法。或者,如果您愿意,可以使用辅助方法将标题的副本放在更简单的结构中,然后将该对象传递给您的类,因为它实际上不需要访问完整的HttpContext