我试图构建一个注册用户列表,作为应用程序中的下拉列表进行选择,该应用程序将任务分配给人员(最终通过电子邮件集成)。我已经成功地使用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>();
}
答案 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();
}
}