Comment obtenir une liste des utilisateurs de ASP.NET identité?

Edit: cette question est dépassée

le cadre D'identité était une cible mouvante au moment où j'ai posé cette question. Les auteurs ont changé pas mal de choses et ils ont découplé plusieurs choses, ce qui rend les choses plus faciles.

regardez Asp.NET l'Identité de l'Échantillon projet sur github.


je crée une petite application qui nécessite la gestion des utilisateurs. L'enregistrement n'est pas autorisé, il y a plutôt un super utilisateur qui créera et modifiera les informations de connexion.

j'utilise le nouveau ASP.NET identité système d'affiliation, et bien sûr, créer des utilisateurs et ajouter des rôles est facile et intuitif.

maintenant, ma question: Comment obtenir une liste d'utilisateurs utilisant la classe AuthenticationIdentityManager qui est utilisée par la classe AccountController générée? Je n'ai pas pu trouver un moyen d'accéder à la liste des utilisateurs depuis mon contrôleur.

(soit dit en passant, le nouveau nom "identité" peut sembler impressionnant pour certaines personnes, mais c'est une douleur de la recherche.)

Modifier: Si j'essaie de le faire

ApplicationDbContext UsersContext = new ApplicationDbContext();
UsersContext.Users.ToList(); // Exception

j'obtiens une exception Invalid column name 'Discriminator'. La définition D'ApplicationDbContext est générée automatiquement par le nouvel assistant d'application:

using Microsoft.AspNet.Identity.EntityFramework;

namespace Cobranzas.Models
{
    public class ApplicationUser : User
    {

    }
    public class ApplicationDbContext : IdentityDbContextWithCustomUser<ApplicationUser>
    {

    }
}

je pense que Discriminator la colonne est pour distinguer ApplicationUserUser. Cependant, il n'existe pas dans ma base de données (qui a été créé automatiquement par l'application.)

37
demandé sur Leonardo Herrera 2013-09-13 00:32:45

5 réponses

j'ai découvert que je n'étais pas à l'aide de la dérivée ApplicationUser objet pour rien, donc je suis juste allé de l'avant et changé toutes les utilisations de celui-ci pour un bon vieux User. Ensuite, j'ai juste changé ApplicationDbContext définition de ce qui suit:

public class ApplicationDbContext : IdentityDbContext<
    User, UserClaim, UserSecret, UserLogin,
    Role, UserRole, Token, UserManagement>
{
}

Et maintenant je peux accéder à la liste des utilisateurs:

UsersContext = new ApplicationDbContext();
...
UsersContext.Users.ToList();

cependant, je pense que cela reviendra et me hantera dans le futur (je vais probablement avoir besoin d'ajouter plus de champs à User) donc probablement je vais devoir utiliser la même approche que dans ce question:

obtenir tous les noms de rôle dans ASP.NET MVC5 Identity system

Modifier: Depuis que j'ai le besoin d'ajouter une nouvelle propriété, j'ai dû revenir de mes modifications. Je suis donc allé de l'avant et j'ai fait une comparaison ligne par ligne avec le ASP.NET projet D'échantillon D'identité, et a découvert que le projet généré avait la ligne suivante:

IdentityManager = new AuthenticationIdentityManager(new IdentityStore());

alors que l'application D'échantillon avait inclus le contexte de base de données dans le constructeur. J'ai donc ajouté dans mon constructeur, recréé la base de données et le problème a disparu.

IdentityManager = new AuthenticationIdentityManager(new IdentityStore(new ApplicationDbContext()));
28
répondu Leonardo Herrera 2017-05-23 10:31:02
  1. Créer ASP .NET MVC5 projet par défaut
  2. Créer ASP .NET Identity tables correctement et changement chaîne de connexion.
  3. pour obtenir les utilisateurs juste faire le test suivant A. passez à AccountController B. créer n'importe quelle méthode factice et y mettre
var context = new ApplicationDbContext();

var allUsers = context.Users.ToList();

enter image description here

14
répondu Academy of Programmer 2014-01-06 16:56:58

Pour la version d'origine, vous devrez descendre à votre DbContext ou peu importe ce que votre implémentation de magasin spécifique a pour énumérer tous les utilisateurs. Dans la prochaine version, nous ajouterons probablement un Utilisateurs/Rôles méthode sur le Gestionnaire de classes que les magasins peuvent mettre en œuvre pour exposer IQueryables pour les utilisateurs et les magasins.

4
répondu Hao Kung 2017-06-13 09:51:30
using System.Linq;
using System.Data;
using System.Data.Entity;

        var db = new ApplicationDbContext();
        var Users = db.Users.Include(u => u.Roles);
1
répondu Hossein Hajizadeh 2017-09-26 10:02:48

si nous pouvons utiliser le type suivant de ConstructorIdentityAccountController.

public AccountController(ApplicationUserManager userManager,
            ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
{
      UserManager = userManager;
      AccessTokenFormat = accessTokenFormat;
}

public ApplicationUserManager UserManager
{
     get
     {
          return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
     }
     private set
     {
          _userManager = value;
     }
}

alors nous pouvons directement utiliser UserManager objet pour obtenir la liste des utilisateurs

var userList= UserManager.Users.ToList();
0
répondu Bhavesh Patel 2018-10-11 06:12:03