C# 获取控制器外部的当前用户
在ASP.NET Core 2.2控制器上,我具有以下功能:C# 获取控制器外部的当前用户,c#,asp.net-core,asp.net-core-2.2,C#,Asp.net Core,Asp.net Core 2.2,在ASP.NET Core 2.2控制器上,我具有以下功能: var principal = this.User as ClaimsPrincipal; var authenticated = this.User.Identity.IsAuthenticated; var claims = this.User.Identities.FirstOrDefault().Claims; var id = this.User.FindFirstValue(ClaimTypes.NameIdenti
var principal = this.User as ClaimsPrincipal;
var authenticated = this.User.Identity.IsAuthenticated;
var claims = this.User.Identities.FirstOrDefault().Claims;
var id = this.User.FindFirstValue(ClaimTypes.NameIdentifier);
我能够检查用户是否通过了身份验证
,并获取声明
,包括id
在
控制器
之外,如果我没有this.User
,如何在该控制器之外执行相同操作?将IHttpContextAccessor
接口注入目标类。这将通过HttpContext
这提供了一个机会,通过创建一个服务来抽象此功能,以提供您想要的信息(即当前登录的用户)
您现在需要在启动中设置IHttpContextAccessor
。ConfigureServices
以便能够插入它:
services.AddHttpContextAccessor();
services.AddTransient<IUserService, UserService>();
services.AddHttpContextAccessor();
services.AddTransient();
并在需要时注入您的服务
需要注意的是,
HttpContext
可以为空。只是因为
您有IHttpContextAccessor
,但这并不意味着您要
实际上,您总是能够获得HttpContext
。重要的是,代码在哪里
您正在使用它,它必须以某种方式在请求管道中,或者
HttpContext
将为空
通过注释贷记需要注意的是,
HttpContext
可以为空。仅仅因为您有IHttpContextAccessor
,并不意味着您将能够实际获取HttpContext
。重要的是,您使用它的代码必须以某种方式位于请求管道中,否则HttpContext
将为空代码>需要吗IHttpContextAccessor
需要它,但AddHttpContextAccessor()
不添加它?
services.AddHttpContextAccessor();
services.AddTransient<IUserService, UserService>();