如何从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()));
- 默认创build
ASP .NET MVC5
项目 - 正确创build
ASP .NET Identity
表,并更改连接string 。 - 为了让用户做下面的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);