Доступ к собственному свойству ApplicationUser из представления в ASP.net Core 2
4 H Mihail [2017-11-01 15:03:00]
Я расширил класс ApplicationUser
чтобы иметь 2 дополнительных свойства: FirstName
и LastName
. Оба свойства сохраняются правильно в базе данных.
public class ApplicationUser : IdentityUser
{
[Required]
[StringLength(100)]
public string FirstName { get; set; }
[Required]
[StringLength(100)]
public string LastName { get; set; }
}
Я следую простому первому примеру, и этот код генерируется командой New Project с пользовательской аутентификацией:
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager
@if (SignInManager.IsSignedIn(User))
{
<form asp-area="" asp-controller="Account" asp-action="Logout" method="post" id="logoutForm" class="navbar-right">
<ul class="nav navbar-nav navbar-right">
<li>
<a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
</li>
<li>
<button type="submit" class="btn btn-link navbar-btn navbar-link">Log out</button>
</li>
</ul>
</form>
}
И вместо Hello @UserManager.GetUserName(User)!
Я хотел бы сказать Hello???????.FirstName!
Я не могу найти способ получить доступ к этим дополнительным свойствам из представления. Любые предложения о том, как это сделать?
Спасибо!
asp.net-core razor asp.net-identity
1 ответ
5 Решение CalC [2017-11-05 02:58:00]
Вам нужно ввести UserManager в свою службу (или просмотреть в вашем случае). У этого есть параметр типового типа, который в вашем случае был бы ApplicationUser
:
UserManager<ApplicationUser> userManager;
Затем вы можете запрашивать пользователей через свойство UserManager.Users. В качестве альтернативы, если вам нужно получить текущего пользователя и иметь свой ClaimsPrincipal
вы можете использовать следующий код для извлечения соответствующего ApplicationUser
:
ApplicationUser user = await UserManager.GetUserAsync(claimsPrincipal);
string firstName = user.FirstName;
Хотя я (лично) не очень увлечен этим,.NET Core поддерживает инъекцию в представления, используя следующий синтаксис.
@inject UserManager<ApplicstionUser> UserManager