You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor中使用Identity获取用户名为何返回真实姓名而非用户ID?

问题原因解析

这其实是ASP.NET Core Identity中声明(Claim)的默认映射规则导致的,完全符合框架的设计逻辑,和你用的.NET 5预览版没有关系~

核心原因

@context.User.Identity.Name这个属性,底层是从用户的Claims集合里读取**类型为ClaimTypes.Name**的声明值,而ClaimTypes.Name对应的字符串常量就是"name"——你在注册时添加的声明正好用了这个类型:

await _userManager.AddClaimAsync(user, new System.Security.Claims.Claim("name", user.Name));

所以框架自动把这个真实姓名的声明值,当成了Identity.Name的返回内容。

额外说明

  1. 如果你想获取原来的用户ID(比如用户名/注册邮箱),应该读取类型为ClaimTypes.NameIdentifier的声明,代码示例:
    var userId = @context.User.FindFirstValue(System.Security.Claims.ClaimTypes.NameIdentifier);
    
  2. 关于你之前修改Identity架构添加的用户字段,其实还有更直接的方式在Blazor组件中获取:注入UserManager<ApplicationUser>,然后通过GetUserAsync方法获取完整的用户实体,直接访问实体属性:
    @inject UserManager<ApplicationUser> _userManager
    
    @code {
        private ApplicationUser currentUser;
    
        protected override async Task OnInitializedAsync()
        {
            currentUser = await _userManager.GetUserAsync(User);
        }
    }
    
    这样你就能直接用currentUser.Name、currentUser.Email等所有自定义字段,不用依赖声明映射。

内容的提问来源于stack exchange,提问作者user3656651

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:38:11