asp.net mvc - route - ¿Dónde está GetAllUsers como proveedor de membresía?
select asp-for asp-items (3)
Creo que debería buscar en System.Web.dll no System.Web.ApplicationServices.dll
Miré la documentación del proveedor de membresía y debería haber dos métodos GetAllUsers en el proveedor de membresía ( http://msdn.microsoft.com/en-us/library/system.web.security.membership.getallusers ).
Pero cuando miro los métodos expuestos por System.Web.Security (en
C:/Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.0/System.Web.ApplicationServices.dll )
Solo tiene un método (el que tiene capacidad de paginación).
¿Dónde puedo encontrar un método para devolver todos los usuarios de la base de datos? Parece que no hay forma de obtener una lista de todos los usuarios o encontrar cuántos usuarios hay en la base de datos.
--Actualizar
mirando System.Web.Security, encontré que SqlMembershipProvider se define de la siguiente manera:
public class SqlMembershipProvider : System.Web.Security.MembershipProvider
pero esta clase no tiene ningún método público GetAllUsers ().
¿Cómo puedo acceder a su método base GetAllUsers?
La forma en que funciona es que debe tener su proveedor de membresía, como un Proveedor de Membresía Sql , configurado en su web.config
. El método Membership.GetAllUsers tomará el MembershipProvider
configurado por defecto y llamará a su método GetAllUsers y pasará 0
por el índice de página actual y int.MaxValue
por el total de registros por página (así como también por un out int
para obtener el total de registros en el almacenar).
Si tienes problemas para llamar a este método, comprueba lo siguiente:
- Tiene los ensamblados .NET correctos referenciados
-
System.Web
-
System.Web.ApplicationServices
-
System.Configuration
-
- Tiene el espacio de nombres correcto al que hace referencia
System.Web.Security
- En tus instrucciones de
using
en la parte superior del archivo - Directamente en el tipo donde se hace referencia
- En tus instrucciones de
- Su
web.config
tiene unMembershipProvider
predeterminado registrado
Notas
- SqlMembershipProvider , que se deriva de
MembershipProvider
, no es del mismo tipo o tipo de jerarquía que el tipoMembership
. Por lo tanto, no todos los métodos que ve enMembership
se pueden encontrar en los tipos que se derivan deMembershipProvider
. - El tipo
Membership
es estático y, por lo tanto, todos sus miembros, incluidos Membership.GetAllUsers, también son estáticos. - El tipo
Membership
está allí para su conveniencia, la mayoría de sus miembros llama al Proveedor deMembershipProvider
predeterminado registrado.
Muestra de código:
using System.Web.Security;
namespace MyNameSpace
{
public class MembershipTests
{
public void Test()
{
var users = Membership.GetAllUsers();
// same as
var totalRecords = 0;
users = Membership.GetAllUsers(0, int.MaxValue, out totalRecords);
// same as (Membership.Provider gets the default registered MembershipProvider)
users = Membership.Provider.GetAllUsers(0, int.MaxValue, out totalRecords);
}
}
}
De la documentación
Observaciones
GetAllUsers devuelve la información para todos los usuarios de membresía para una aplicación como una colección de objetos MembershipUser. Tenga cuidado al usar el método GetAllUsers con bases de datos de usuario muy grandes, ya que MembershipUserCollection resultante en su página ASP.NET puede degradar el rendimiento de su aplicación.
La pregunta es "¿Dónde está GetAllUsers en el proveedor de membresía?"
La respuesta es que no está en MembershipProvider. Está en System.Web.Security.Membership
El enlace de MSDN que proporcionó en su pregunta dice lo mismo.
El método GetAllUsers estático y sobrecargado.
int userCount = 0;
MembershipUserCollection muc1 = System.Web.Security.Membership.GetAllUsers();
MembershipUserCollection muc2 = System.Web.Security.Membership.GetAllUsers(0, int.MaxValue, out userCount);
Si tienes problemas con el espacio de nombres, mezclaron algunas cosas entre .net 3.5 y .net 4.0
Esto me mordió hace varios años.
.Net 4.0 System.Web.Security.MembershipProvider ¿referencia ambigua?