我想獲取當前用戶以獲取用戶的信息,例如電子郵件。 但我不能這樣做在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。 –