ASP.NET Core 1.1 获取所有用户及其角色
Posted
技术标签:
【中文标题】ASP.NET Core 1.1 获取所有用户及其角色【英文标题】:ASP.NET Core 1.1 getting all users and their roles 【发布时间】:2017-09-19 14:29:33 【问题描述】:我是 .NET 的新手,我试图获取所有注册用户的列表及其角色名称,并使用 viewModel 将它们发送到视图。
这是视图模型:
public class ApplicationUserListViewModel
[Display(Name = "User Email Address")]
public string UserEmail get; set;
public List<IdentityUserRole<string>> Roles get; set;
我尝试这样做是为了获取所有用户及其角色,并为每个用户创建一个 ViewModel,并将所有视图模型放在一个列表中以传递给 View:
var users = _userManager.Users.ToList();
var userList = users.Select(u =>
new ApplicationUserListViewModel
UserEmail = u.Email,
Roles = u.Roles.ToList()
).ToList();
但是当我清楚地为每个用户分配了角色时,这总是给我每个用户的角色计数为 0。
【问题讨论】:
_userManager.Users.Include(u => u.Roles)
【参考方案1】:
您自己解决了问题,但您的解决方案并不完美,因为它会导致性能问题。您正在对数据库执行一个请求以查询用户,然后在 foreach
循环中为每个用户执行一个新查询以获取他们的相关角色,这非常糟糕。如果您的数据库中有 X 用户,您最终将使用:
您可以通过在一个查询中包含相关角色来做得更好,如下所示:
foreach (var user in _userManager.Users.Include(u => u.Roles).ToList())
list.Add(new ApplicationUserListViewModel
UserEmail = user.Email,
Roles = user.Roles
);
或者只是这样:
var users = _userManager.Users.Include(u => u.Roles)
.Select(u => new ApplicationUserListViewModel
UserEmail = user.Email,
Roles = user.Roles
)
.ToList();
ASP.NET Core Identity 2.x 更新
此解决方案对 ASP.NET Core Identity 2.x 无效,因为 IdentityUser
不再包含 Roles
属性。请参阅 this answer 了解 ASP.NET Core Identity 2.x。
【讨论】:
【参考方案2】:嗯,我得到了这个工作。这可能不应该这样做,但它工作正常。
var list = new List<ApplicationUserListViewModel>();
foreach (var user in _userManager.Users.ToList())
list.Add(new ApplicationUserListViewModel()
UserEmail = user.Email,
Roles = await _userManager.GetRolesAsync(user)
);
【讨论】:
以上是关于ASP.NET Core 1.1 获取所有用户及其角色的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 3.1 - 如何获取客户端的 IP 地址?
ASP.Net Core Identity - 管理其他用户
获取 ASP .Net Core WebAPI 中的所有身份角色