使用AspNetCore.Identity创建身份注册用户列表

时间:2016-12-07 11:19:48

标签: linq asp.net-core entity-framework-core asp.net-core-identity

我试图构建一个注册用户列表,作为应用程序中的下拉列表进行选择,该应用程序将任务分配给人员(最终通过电子邮件集成)。我已经成功地使用AspNetCore.Identity来创建注册用户。

以下是我迄今为止尝试过的一个例子:

public class MinutaDbContext : IdentityDbContext<User>
{
    public List<User> QueryUserNames()
    {
        var context = new MinutaDbContext();
        var allUsers = context.Users.ToList();
        return allUsers;
    }
}

控制器:

public UserAssignmentController(UserManager<ApplicationUser> userManager, RoleManager<IdentityRole> roleManager)
    {
        UserManager = userManager;
        RoleManager = roleManager;
    }

我已经看到有关使用AspNet.Identity解决方案的UserManager的回复不起作用,因为它在AspNetCore中有不同的声明,并且我不确定如何满足上述所需的参数。 / p>

Linq是否需要或是否可以从以下列表中提取列表:

public UserManager(IUserStore<TUser> store, IOptions<IdentityOptions> optionsAccessor, IPasswordHasher<TUser> passwordHasher, IEnumerable<IUserValidator<TUser>> userValidators, IEnumerable<IPasswordValidator<TUser>> passwordValidators, ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, IServiceProvider services, ILogger<UserManager<TUser>> logger);

或者我应该在其他地方寻找,例如IQueryableUserStore接口?

更新 我的DbContext构造函数已经使用参数选项扩展了base。

public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddSingleton(Configuration); // Injections
        services.AddSingleton<IGreeter, Greeter>();
        services.AddScoped<INoteData, SqlNoteData>();
        services.AddDbContext<MinutaDbContext>(options => 
                options.UseSqlServer(Configuration.GetConnectionString("Minuta")));
        services.AddIdentity<User, IdentityRole>()
            .AddEntityFrameworkStores<MinutaDbContext>();
    }

3 个答案:

答案 0 :(得分:0)

将此属性添加为MinutaDbContext类的构造函数

public MinutaDbContext(DbContextOptions options):base(options)             {

        }

然后确保为configureservices方法配置startup.cs文件。 然后,如果您使用的是存储库模式,则需要为服务集合添加范围。如果你可以发布startup.cs文件中的内容。这会有所帮助。

答案 1 :(得分:0)

最好将UserManager注入您的控制器,然后您可以使用Users属性从数据库中获取所有用户:

public UserAssignmentController : Controller
{
    private readonly UserManager<User> _userManager;

    public UserAssignmentController(UserManager<User> userManager)
    {
        _userManager = userManager;
    }

     public async Task<IActionResult> Index()
    {
        var users = await _userManager.Users;
        return View(users);
    }
}

答案 2 :(得分:0)

感谢您的所有贡献,我已经标记了作为问题解决方案帮助最多的答案。为了完整起见,这是我对解决方案的实现。创建了一个辅助类,根据需要返回一串用户名:

public List<string> UserList  {
            get {
                var allUsers = userManager.Users;
                return allUsers.Select(x => x.UserName).ToList();
            }
        }