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

Leo*_*era 40 asp.net asp.net-membership asp.net-mvc-5 asp.net-identity

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

在我问这个时,身份框架是一个移动目标.作者改变了很多东西,他们将几件事分开,使事情变得更容易.

看看github上的Asp.NET Identity Sample项目.


我正在创建一个需要用户管理的小应用程序.不允许注册,而是有超级用户将创建和修改登录信息.

我正在使用新的ASP.NET身份会员系统,当然,创建用户和添加角色非常简单直观.

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

(顺便说一句,新名称"身份"对某些人来说可能听起来很棒,但搜索却很痛苦.)

编辑:如果我尝试这样做

ApplicationDbContext UsersContext = new ApplicationDbContext();
UsersContext.Users.ToList(); // Exception
Run Code Online (Sandbox Code Playgroud)

我得到一个例外Invalid column name 'Discriminator'.ApplicationDbContext的定义由新的应用程序向导自动生成:

using Microsoft.AspNet.Identity.EntityFramework;

namespace Cobranzas.Models
{
    public class ApplicationUser : User
    {

    }
    public class ApplicationDbContext : IdentityDbContextWithCustomUser<ApplicationUser>
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

所以我的猜测是,Discriminator列告诉分开ApplicationUserUser.但是,它在我的数据库中不存在(由应用程序自动创建).

Leo*_*era 30

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

public class ApplicationDbContext : IdentityDbContext<
    User, UserClaim, UserSecret, UserLogin,
    Role, UserRole, Token, UserManagement>
{
}
Run Code Online (Sandbox Code Playgroud)

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

UsersContext = new ApplicationDbContext();
...
UsersContext.Users.ToList();
Run Code Online (Sandbox Code Playgroud)

但是,我认为这将会回来并在将来困扰我(我可能需要添加更多字段User)所以我可能必须使用与此问题相同的方法:

获取ASP.NET MVC5身份系统中的所有角色名称

编辑:由于我需要添加一个新属性,我不得不恢复我的更改.所以我继续与ASP.NET Identity Sample Project进行逐行比较,发现生成的项目有以下几行:

IdentityManager = new AuthenticationIdentityManager(new IdentityStore());
Run Code Online (Sandbox Code Playgroud)

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

IdentityManager = new AuthenticationIdentityManager(new IdentityStore(new ApplicationDbContext()));
Run Code Online (Sandbox Code Playgroud)


Dev*_*per 15

  1. ASP .NET MVC5默认情况下创建项目
  2. ASP .NET Identity正确创建表并更改连接字符串.
  3. 要让用户只做以下测试A.转到AccountController B.创建任何虚拟方法并放在那里
var context = new ApplicationDbContext();

var allUsers = context.Users.ToList();
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述