如何获得当前用户在asp.net核心

我想获取当前用户获取电子邮件等用户的信息。 但我不能这样做在asp.net核心。我很困惑这是我的代码。

HttpContext在控制器的构造函数中几乎为null。 在每次操作中获取用户并不好。我想获取一次用户信息,并将其设置为ViewData ;

  public DashboardController() { var user = HttpContext.User.GetUserId(); } 
 User.FindFirst(ClaimTypes.NameIdentifier).Value 

编辑构造函数

下面的代码工作:

 public Controller(IHttpContextAccessor httpContextAccessor) { var userId = httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value } 

编辑RTM

你应该注册IHttpContextAccessor

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

在Asp.NET Core中有另一种获取当前用户的方法 – 我想我在这里看到了它在SO ^^上的地方

 // Stores UserManager private readonly UserManager<ApplicationUser> _manager; // Inject UserManager using dependency injection. // Works only if you choose "Individual user accounts" during project creation. public DemoController(UserManager<ApplicationUser> manager) { _manager = manager; } // You can also just take part after return and use it in async methods. private async Task<ApplicationUser> GetCurrentUser() { return await _manager.GetUserAsync(HttpContext.User); } // Generic demo method. public async Task DemoMethod() { var user = await GetUserAsync(); string userEmail = user.Email; // Here you gets user email string userId = user.Id; } 

该代码发送到名为DemoController的控制器。 如果没有等待(不会编译);)

简单的方法,工作,我检查。

 var user = await _userManager.GetUserAsync(HttpContext.User); 

那么你可以像user.Email这个variables的所有属性。 我希望这会帮助别人。

从现在(2017年4月)可以看出,以下工作:

 public string LoggedInUser => User.Identity; 

至less在一个Controller