.net core 在WebAPI.NETCore2.2中继承ControllerBase是一种好的做法吗?
我正在创建一个webapi,我想创建一个从ControllerBase类继承的控制器 我这样做是因为我需要在调用操作之前做一些事情,例如检查用户注册并使用HttpContext.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();
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中)、操作属性和对授权服务的调用(用于基于资源的授权)轻松处理,而无需使用中间件或类似的东西。