如何从ASP.NET身份获取用户列表?

编辑:这个问题已经过时了

身份框架是我提出这个问题的一个移动目标。 作者改变了很多东西,并将几件事情分离开来,使事情变得更加简单。

看看github上的Asp.NET标识示例项目 。


我正在创build一个需要用户pipe理的小应用程序。 不允许注册,而是有一个超级用户将创build和修改login信息。

我正在使用新的ASP.NET身份authentication系统,当然,创build用户和添加angular色非常简单直观。

现在,我的问题是:如何获得使用生成的AccountController类使用的AuthenticationIdentityManager类的用户列表? 我找不到从我的控制器访问用户列表的方法。

(顺便说一下,新名称“身份”对某些人来说可能听起来很棒,但这是一种痛苦)。

编辑 :如果我试图做到这一点

ApplicationDbContext UsersContext = new ApplicationDbContext(); UsersContext.Users.ToList(); // Exception 

我收到一个exceptionInvalid column name 'Discriminator' 。 ApplicationDbContext的定义由新应用程序向导自动生成:

 using Microsoft.AspNet.Identity.EntityFramework; namespace Cobranzas.Models { public class ApplicationUser : User { } public class ApplicationDbContext : IdentityDbContextWithCustomUser<ApplicationUser> { } } 

所以我的猜测是Discriminator列是用来Discriminator UserUser从User 。 但是,它不存在于我的数据库(它是由应用程序自动创build的)。

我发现,我没有使用派生的ApplicationUser对象的任何东西,所以我只是继续前进,并改变它的普通旧User所有用途。 然后,我只是改变了以下的ApplicationDbContext定义:

 public class ApplicationDbContext : IdentityDbContext< User, UserClaim, UserSecret, UserLogin, Role, UserRole, Token, UserManagement> { } 

现在我可以访问用户列表:

 UsersContext = new ApplicationDbContext(); ... UsersContext.Users.ToList(); 

不过,我认为这将会回来,并在将来困扰我(我可能需要添加更多的字段到User ),所以可能我将不得不使用相同的方法,在这个问题:

获取ASP.NET MVC5 Identity系统中的所有angular色名称

编辑 :由于我需要添加一个新的属性,我不得不恢复我的更改。 所以我继续前进,并与ASP.NET身份示例项目进行逐行比较,发现生成的项目具有以下行:

 IdentityManager = new AuthenticationIdentityManager(new IdentityStore()); 

而Sample应用程序在构造函数中包含了数据库上下文。 所以我把它添加到我的构造函数中,重新创build了数据库,问题就消失了。

 IdentityManager = new AuthenticationIdentityManager(new IdentityStore(new ApplicationDbContext())); 
  1. 默认创buildASP .NET MVC5项目
  2. 正确创buildASP .NET Identity表,并更改连接string
  3. 为了让用户做下面的testingA.进入AccountController B.创build任何虚拟方法并放在那里
 var context = new ApplicationDbContext(); var allUsers = context.Users.ToList(); 

在这里输入图像说明

对于RTM,您将不得不下拉到您的DbContext或任何具体的商店实施必须枚举所有用户。 在下一个版本中,我们很可能会在Manager类上添加一个可选的IQueryable用户/angular色方法,该类可以实现为用户和商店公开IQueryables

 using System.Linq; using System.Data; using System.Data.Entity; var db = new ApplicationDbContext(); var Users = db.Users.Include(u => u.Roles);