【发布时间】:2015-11-18 02:11:16
【问题描述】:
我正在尝试获取一个角色中所有用户的列表,尽管我在这里阅读了许多问题和链接,但我似乎无法弄清楚这个身份的东西。以下是我目前正在使用的内容:
IdentityRole role = context.Roles.Where(x => x.Name == rolesDDL.SelectedValue).First();
var users = context.Users.Where(x => x.Roles.Any(r => r.RoleId == role.Id));
但是,这会在角色行上显示“序列不包含元素”的错误。我尝试使用 UserManager/RoleManager 执行类似的代码,但结果相同:
var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roleManager = Request.GetOwinContext().GetUserManager<ApplicationRoleManager>();
IdentityRole role = roleManager.Roles.Where(x => x.Name == rolesDDL.SelectedValue).First();
var users = userManager.Users.Where(x => x.Roles.Any(r => r.RoleId == role.Id));
编辑:这似乎是 RoleManager 无法真正找到我的角色的问题。如果我进入 ServerExplorer,我可以在我的 AspNetRoles 表中看到角色,但是在从 OWIN 上下文实例化我的 RoleManager 之后,它似乎仍然没有任何角色。这可能是为数据安装 RavenDB 的问题吗?我也看到了如何将用户迁移到 Raven,但我希望先让它使用默认值,然后再为自己解决更多问题。
这是我目前在这个函数中拥有的:
var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roleManager = Request.GetOwinContext().GetUserManager<ApplicationRoleManager>();
//IdentityRole role = roleManager.Roles.Where(x => x.Name == rolesDDL.SelectedValue).First();
//var users = userManager.Users.Where(x => x.Roles.Any(r => r.RoleId == role.
//IdentityRole role = context.Roles.Where(x => x.Name == rolesDDL.SelectedValue).First();
//var users = context.Users.Where(x => x.Roles.Any(r => r.RoleId == role.Id));
var users = roleManager.FindByName(rolesDDL.SelectedItem.Text).Users;
编辑:为每个请求添加初始化程序,在 startup.auth.cs 中找到:
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
【问题讨论】:
-
你有一个很好的错误。去调试吧。我猜错误可能是 context.Roles 没有元素或 rolesDDL.SelectedValue 没有元素。检查他们两个,然后你就会知道你的下一步,或者可以问另一个问题。
-
我从星期五开始写这篇文章,今天上午完成了。哎呀。 RolesDDL 填充角色,所以我知道它们存在于数据库中。我在那里使用相同的上下文来获取角色。
标签: c# asp.net webforms roles asp.net-identity-2