0

Ich versuche, eine Liste der registrierten Benutzer für die Auswahl als Dropdown-Liste in einer Anwendung, die Aufgaben zuweisen Menschen (schließlich mit E-Mail-Integration) zu erstellen. Ich habe erfolgreich AspNetCore.Identity zum Erstellen von registrierten Benutzern verwendet. HierErstellen Sie eine Liste der registrierten Benutzer Identität mit AspNetCore.Identity

ist ein Beispiel dafür, was ich versucht habe, so weit:

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

Controller:

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

Die Antworten, die ich je gesehen habe in Bezug auf Usermanager mit AspNet.Identity Lösungen funktionieren nicht weil es in AspNetCore eine andere Deklaration hat und ich nicht sicher bin, wie man die erforderlichen Argumente für das oben genannte befriedigt.

Ist Linq erforderlich oder ist es möglich, aus einer Liste zu extrahieren:

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); 

Oder soll ich an anderer Stelle zu suchen, wie die IQueryableUserStore Schnittstelle?

Aktualisieren Mein DbContext-Konstruktor erweitert bereits Basis mit Argumentoption.

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>(); 
    } 

Antwort

0

Es ist besser UserManager in Ihren Controller zu injizieren, dann können Sie Users Eigenschaft verwenden, um alle Benutzer aus der Datenbank zu erhalten:

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); 
    } 
} 
0

Fügen Sie diese Ihren den Konstruktor der Klasse MinutaDbContext

öffentliche MinutaDbContext (DbContextOptions Optionen): base (Optionen) {

 } 

Dann stellen Sie sicher, dass Ihre startup.cs Datei für konfigurieren Konfigurationsdienstmethode. Wenn Sie das Repository-Muster verwenden, müssen Sie einen Bereich für Ihre Servicesammlung hinzufügen. wenn Sie veröffentlichen können, was Sie in startup.cs-Datei haben. Das wird helfen.

+0

Ich habe die angeforderte startup.cs ConfigureServices-Methode als Bearbeitung oben hinzugefügt. Scope wurde auch für die Implementierung der Service-Sammlung hinzugefügt, aber ich bin nicht sicher, wie sich das auf meine Fähigkeit auswirkt, eine Liste der registrierten Benutzer zu erhalten? – Remy

0

Danke für alle Beiträge, ich habe die Antwort markiert, die am meisten dazu beigetragen, als die Problemlösung. Der Vollständigkeit halber war hier meine Implementierung der Lösung. Eine Helper-Klasse wurde erstellt, die wie folgt eine Zeichenfolge mit Benutzernamen zurückgibt:

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