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

ASP.NET Core如何获取Identity数据库所有用户的Claim并列表展示

实现方案

你之前用的User.Claims只能获取当前请求登录用户的声明,要拿到全量用户的Claim数据,按以下步骤实现即可:


1. 后端获取所有用户的Claim数据

你已经注入了自定义上下文DBContextClass,直接用上下文查询Identity内置的UserClaims数据集性能最高,适合所有场景:
首先在你的IndexModel中定义接收数据的属性,然后在OnGet方法中查询:

// PageModel中定义传递给视图的属性
public List<IdentityUserClaim<string>> AllUserClaims { get; set; }

public async Task OnGetAsync()
{
    // 直接查询AspNetUserClaims表的全量数据
    AllUserClaims = await _context.UserClaims.ToListAsync();

    // 如果需要关联带出用户名等用户基础信息,改用关联查询即可
    /*
    AllUserClaims = await _context.UserClaims
        .Join(_context.Users,
            claim => claim.UserId,
            user => user.Id,
            (claim, user) => new 
            {
                claim.UserId,
                user.UserName,
                claim.ClaimType,
                claim.ClaimValue
            }).ToListAsync();
    */
}

如果你的用户量很小,也可以用UserManager遍历所有用户拉取声明:

AllUserClaims = new List<IdentityUserClaim<string>>();
var allUsers = await _userManager.Users.ToListAsync();
foreach (var user in allUsers)
{
    var claims = await _userManager.GetClaimsAsync(user);
    AllUserClaims.AddRange(claims.Select(c => new IdentityUserClaim<string>
    {
        UserId = user.Id,
        ClaimType = c.Type,
        ClaimValue = c.Value
    }));
}

注:如果你的Identity主键不是默认的string类型,把IdentityUserClaim<string>的泛型参数替换为你实际的主键类型即可。


2. 前端视图渲染Claims列表

参考你现有的表格写法,新增以下表格渲染全量Claim数据:

<table class="table border-light" id="UserClaims">
    <thead>
        <tr>
            <th>用户ID</th>
            <!-- 如果关联查询了用户名就打开下面这行 -->
            <!-- <th>用户名</th> -->
            <th>声明类型(ClaimType)</th>
            <th>声明值(ClaimValue)</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var claim in Model.AllUserClaims)
        {
            <tr>
                <td>@Html.DisplayFor(c => c.UserId)</td>
                <!-- <td>@Html.DisplayFor(c => c.UserName)</td> -->
                <td>@Html.DisplayFor(c => c.ClaimType)</td>
                <td>@Html.DisplayFor(c => c.ClaimValue)</td>
            </tr>
        }
    </tbody>
</table>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:36:06