User.Identity.Name返回UserName而不是Name

时间:2017-06-17 08:55:15

标签: asp.net-mvc razor view asp.net-identity

我想在_LoginPartial的导航栏中显示用户名而不是UserName目前我正在使用User.Identity.GetUserName()作为userName,但现在我想显示当前用户的名称。

_LoginPartial由Startup.Auth.cs调用,因此我无法在后端运行查询并获取我的用户名,因此我只能使用可以在视图中运行razor的内置函数。 p>

我已经尝试了所有这些但是他们都给了我用户名而不是用户名。

<small>@System.Threading.Thread.CurrentPrincipal.Identity.Name</small>
<small>@User.Identity.Name</small>
<small>@threadPrincipal.Identity.Name</small>
<small>@System.Web.HttpContext.Current.User.Identity.Name</small>

如何获取名称而不是userName

这是用户表

ID
Email
EmailConfirm
Password
Security
PhoneNumber
PhoneNumberConfirm
TwoFactorEnable
LockoutEndDateUtc
LockoutEnable
AccessFailedCount
UserName
Name
Status
Image

1 个答案:

答案 0 :(得分:2)

由于Name是ApplicationUser(扩展的IdentityUser)的自定义字段,因此您需要将该字段添加为声明。

如果您已使用模板设置Identity,那么您将在 IdentityModels.cs 类ApplicationUser中找到。在这里,我添加了一个字段&#39; Name&#39;并将其添加为声明:

public class ApplicationUser : IdentityUser
{
    public string Name { get; set; }

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);

        // Add custom user claims here
        userIdentity.AddClaim(new Claim("CustomName", Name));

        return userIdentity;
    }
}

此代码将添加声明&#39; CustomName&#39;它具有名称的价值。

在您看来,您现在可以阅读声明。这是_LoginPartial中的一个例子:

<ul class="nav navbar-nav navbar-right">
    <li>
        @{ var user = (System.Security.Claims.ClaimsIdentity)User.Identity; }
        @Html.ActionLink("Hello " + user.FindFirstValue("CustomName") + "!", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })
    </li>

您可以添加其他自定义字段以及声明。