我正在使用ASP.Net核心,我需要访问业务逻辑类(不是控制器或操作)中的特定HTTP标头.
为了提供这里的配置的完整图片,我有一个自定义ASP.Net核心中间件,它基于某些逻辑将一个值添加到自定义HTTP头,它是我需要在业务逻辑中访问此头的值类.
目前,我实现这一目标的方法是使用以下DI注册注入HttpContextAccessor.
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
在需要访问HTTP标头的类中,然后使用构造函数注入请求IHttpContextAccessor并使用它来访问相关的HTTP标头.
做上面的工作很好,并给我我需要的结果,浏览互联网上的各种文章,但普遍的共识似乎是避免在ASP.Net核心中使用HttpContext.Current.
如果是这种情况,我的业务逻辑类是否有更好的方法来访问我的自定义中间件插入自定义HTTP标头的值?
我应该清楚,虽然目前中间件将所需的值存储在HTTP头中以供业务逻辑类使用,但我对中间件的其他方法持开放态度,使得业务逻辑类可以使用所需的值(如果存在)更好的方法.
如有任何问题或解释,请告诉我.
最佳答案 ASP.Net Core中没有HttpContext.Current,因此很容易避免使用它.如果需要,您必须实现自己的扩展方法,但.Net Core社区的一般感觉是使用IHttpContextAccessor要好得多.
在早期版本的.Net Core中,IHttpContextAccessor的实现在DI容器中自动注册.在更新的版本中,您必须使用您提到的代码行自行注册:
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
将IHttpContext注入需要访问头的方法是一种可行的方法.或者,如果您愿意,可以使用一个帮助器方法,将头文件的副本放在一个更简单的结构中,然后将该对象传递给您的类,因为它实际上不需要访问完整的HttpContext.