将自定义属性添加到核心 2 中的声明主体用户 asp.net



根据标题的描述,我创建了一个从ClaimsPrincipal派生的类,并具有其他属性:

public class CustomeUser: ClaimsPrincipal
{
// additional properties
}

编写了一个中间件并从声明中为其分配了值:

public async Task Invoke(HttpContext context)
{
// context to read header and assign to custome properties
context.User = new CustomeUser() {
ClientIP = /*reading from claims*/,
UserId = /*reading from claims*/};
}

并在配置服务中添加以下行,以使HttpContext从启动类中的控制器获取该自定义用户属性。

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

从控制器到获取自定义用户属性

public BaseController(IHttpContextAccessor httpContextAccessor)
{
customeUser = httpContextAccessor.HttpContext.User as CustomeUser;
}

这是一种正确的方法吗?

如果您从控制器访问HttpContext,则不需要IHttpContextAccessor。 控制器从中继承(通过控制器类)Microsoft.AspNetCore.Mvc.ControllerBase类具有HttpContext属性。因此,您的代码可以更改为:

public BaseController()
{
customeUser = HttpContext.User as CustomeUser;
}

其余的似乎都很好。HttpContext.User将包含您在该方法中填写Invoke()CustomeUser的实例,以便讨厌的类型转换为CustomeUser就可以正常工作。

相关内容

最新更新