.net core 在WebAPI.NETCore2.2中继承ControllerBase是一种好的做法吗?

.net core 在WebAPI.NETCore2.2中继承ControllerBase是一种好的做法吗?,.net-core,asp.net-core-webapi,httpcontext,.net Core,Asp.net Core Webapi,Httpcontext,我正在创建一个webapi,我想创建一个从ControllerBase类继承的控制器 我这样做是因为我需要在调用操作之前做一些事情,例如检查用户注册并使用HttpContext public class BaseApiZrController : ControllerBase { public BaseApiZrController(ApplicationDbContext db) { this.HandleAuthentication();

我正在创建一个webapi,我想创建一个从ControllerBase类继承的控制器

我这样做是因为我需要在调用操作之前做一些事情,例如检查用户注册并使用HttpContext

public class BaseApiZrController : ControllerBase
{
    public BaseApiZrController(ApplicationDbContext db)
    {

        this.HandleAuthentication();

        //??? this.HttpContext is always null, how come?
        ClaimsPrincipal claimsPrincipal = this.HttpContext.User;

    }
    //...some code

 }
这是一个好的实践,还是我应该通过中间件在start类中完成所有这些工作


另一个问题是,当将ControllerBase类继承到我的自定义BaseApiZrController类中时,我无法访问httpContext,它总是返回null,为什么?

在asp.net core中,如果我们创建一个web api控制器,默认情况下它拥有
ControllerBase

如果要在调用操作之前执行某些操作,可以使用或。请参阅

调用控制器的构造函数时,
HttpContext
不可用。 看这个

您可以使用
IHttpContextAccessor
helper服务获取ASP.NET核心依赖项注入系统管理的任何类中的HTTP上下文。当控制器使用公共服务时,这非常有用

private readonly IHttpContextAccessor _httpContextAccessor;
    public BaseApiZrController(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
        ClaimsPrincipal claimsPrincipal = _httpContextAccessor.HttpContext.User;
    }
在startup.cs中:

public void ConfigureServices(IServiceCollection services)
{
   services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

   // Other code...
}
public void配置服务(IServiceCollection服务)
{
services.TryAddSingleton();
//其他代码。。。
}

有关身份验证和授权,请参阅

,请确保查阅文档中的这些部分。这可以通过配置(在Startup.cs中)、操作属性和对授权服务的调用(用于基于资源的授权)轻松处理,而无需使用中间件或类似的东西。