>我扩展了ApplicationUser
类,具有 2 个额外的属性,FirstName
和 LastName
。这两个属性都正确保留在数据库中。
public class ApplicationUser : IdentityUser
{
[Required]
[StringLength(100)]
public string FirstName { get; set; }
[Required]
[StringLength(100)]
public string LastName { get; set; }
}
我遵循一个简单的初学者示例,有问题的代码由"使用用户身份验证新建项目"命令生成:
@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!
我找不到从视图中访问这些额外属性的方法。关于如何做到这一点的任何建议?
谢谢!
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