asp.net - español - current user asp net core
¿Cómo obtener una lista de usuarios de ASP.NET Identity? (4)
- Cree el proyecto
ASP .NET MVC5
de forma predeterminada - Cree tablas de
ASP .NET Identity
correctamente y cambie la cadena de conexión también. - Para que los usuarios simplemente hagan la siguiente prueba A. Vaya a
AccountController
B. Cree cualquier método ficticio y póngalo allí
var context = new ApplicationDbContext(); var allUsers = context.Users.ToList();
Editar: esta pregunta está desactualizada
El Marco de Identidad era un objetivo móvil en el momento en que pregunté esto. Los autores cambiaron bastantes cosas y han desacoplado varias cosas, facilitando las cosas.
Eche un vistazo al proyecto Asp.NET Identity Sample en github .
Estoy creando una pequeña aplicación que requiere la administración de usuarios. No se permite el registro, en su lugar hay un superusuario que creará y modificará la información de inicio de sesión.
Estoy usando el nuevo sistema de membresía Identity de ASP.NET y, por supuesto, crear usuarios y agregar roles es fácil e intuitivo.
Ahora, mi pregunta: ¿cómo obtener una lista de usuarios que usan la clase AuthenticationIdentityManager que usa la clase generada AccountController? No pude encontrar una manera de acceder a la lista de usuarios desde mi controlador.
(Por cierto, el nuevo nombre "Identidad" puede sonar increíble para algunas personas, pero es un dolor buscarlo).
Editar : si trato de hacer esto
ApplicationDbContext UsersContext = new ApplicationDbContext();
UsersContext.Users.ToList(); // Exception
Obtengo una excepción Invalid column name ''Discriminator''
. La definición de ApplicationDbContext se genera automáticamente mediante el nuevo asistente de aplicación:
using Microsoft.AspNet.Identity.EntityFramework;
namespace Cobranzas.Models
{
public class ApplicationUser : User
{
}
public class ApplicationDbContext : IdentityDbContextWithCustomUser<ApplicationUser>
{
}
}
Así que supongo que esa columna Discriminator
es para separar ApplicationUser
del User
. Sin embargo, no existe en mi base de datos (que fue creada automáticamente por la aplicación).
Descubrí que no estaba utilizando el objeto ApplicationUser
derivado para nada, así que simplemente seguí adelante y cambié todos los usos para el User
antiguo. Luego acabo de cambiar la definición de ApplicationDbContext
por lo siguiente:
public class ApplicationDbContext : IdentityDbContext<
User, UserClaim, UserSecret, UserLogin,
Role, UserRole, Token, UserManagement>
{
}
Y ahora puedo acceder a la lista de usuarios:
UsersContext = new ApplicationDbContext();
...
UsersContext.Users.ToList();
Sin embargo, creo que esto volverá y me atormentará en el futuro (probablemente necesite agregar más campos al User
), así que probablemente tendré que usar el mismo enfoque que en esta pregunta:
Obtener todos los nombres de roles en el sistema de identidad ASP.NET MVC5
Editar : Desde que tuve la necesidad de agregar una nueva propiedad, tuve que revertir mis cambios. Así que seguí adelante e hice una comparación línea por línea con el Proyecto de muestra de identidad ASP.NET, y descubrí que el proyecto generado tenía la siguiente línea:
IdentityManager = new AuthenticationIdentityManager(new IdentityStore());
mientras que la aplicación de muestra incluía el contexto de la base de datos en el constructor. Así que lo agregué en mi constructor, recreé la base de datos y el problema desapareció.
IdentityManager = new AuthenticationIdentityManager(new IdentityStore(new ApplicationDbContext()));
Para RTM, tendrá que desplegar a su DbContext
o lo que sea que su implementación específica de la tienda tenga para enumerar a todos los usuarios. En la próxima versión, lo más probable es que agreguemos un método opcional IQueryable
Users / Roles en las clases de administrador que las tiendas pueden implementar para exponer IQueryables
para usuarios y tiendas.
using System.Linq;
using System.Data;
using System.Data.Entity;
var db = new ApplicationDbContext();
var Users = db.Users.Include(u => u.Roles);