gpt4 book ai didi

.net-core - 在 Web API .NET Core 2.2 中继承 ControllerBase 是一种好习惯吗?

转载 作者:行者123 更新时间:2023-12-04 17:40:17 31 4
gpt4 key购买 nike

我正在创建一个 webapi,我想创建一个继承自 ControllerBase 类的 Controller 。

我这样做是因为我需要在调用操作之前做一些事情,即检查用户注册并使用 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

}

这是一个好的做法还是我应该通过中间件在起始类中完成所有这些工作?

另外一个问题,我自定义的BaseApiZrController类继承ControllerBase类时,无法访问httpContext,总是返回null,这是怎么回事?

最佳答案

在 asp.net core 中,如果我们创建一个 web api Controller ,它默认有 ControllerBase

如果你想在调用 Action 之前做一些事情,你可以使用 Action FilterAuthorization Filter .引用Implementing Action Filters in ASP.NET Core .

HttpContext 在调用 Controller 的构造函数时不可用。看这个post .

您可以使用 IHttpContextAccessor 帮助程序服务来获取由 ASP.NET Core 依赖注入(inject)系统管理的任何类中的 HTTP 上下文。当您有 Controller 使用的公共(public)服务时,这很有用。

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...
}

引用Access HttpContext in ASP.NET Core

关于.net-core - 在 Web API .NET Core 2.2 中继承 ControllerBase 是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54836608/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com