我想获取当前用户以获取用户的信息,例如电子邮件。 但我不能这样做在asp.net核心。我很困惑 这是我的代码。如何在asp.net核心中获取当前用户
HttpContext
几乎为空构造函数控制器。 在每次操作中都得不到用户。我想获取一次用户信息并将它们设置为ViewData
;
public DashboardController()
{
var user = HttpContext.User.GetUserId();
}
我想获取当前用户以获取用户的信息,例如电子邮件。 但我不能这样做在asp.net核心。我很困惑 这是我的代码。如何在asp.net核心中获取当前用户
HttpContext
几乎为空构造函数控制器。 在每次操作中都得不到用户。我想获取一次用户信息并将它们设置为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>();
}
它在actions.but中工作,但我想在控制器的构造函数中使用。 –
有没有可能在类中使用它? –
因为依赖注入,是的,你可以使用 –
有在Asp.NET核心获取当前用户的另一种方式 - 我想我是在这里看到的地方,在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
这个变量的所有属性。我希望这会帮助某人。
这样看来,截至目前(2017年四月),下面的工作:
public string LoggedInUser => User.Identity;
至少当内Controller
与MVC或网页API使用? – Tushar
我正在使用mvc。 –