tag route page net mvc for asp asp.net-mvc asp.net-mvc-3 model-view-controller asp.net-membership membership-provider

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
  • Su web.config tiene un MembershipProvider predeterminado registrado

Notas

  • SqlMembershipProvider , que se deriva de MembershipProvider , no es del mismo tipo o tipo de jerarquía que el tipo Membership . Por lo tanto, no todos los métodos que ve en Membership se pueden encontrar en los tipos que se derivan de MembershipProvider .
  • 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 de MembershipProvider 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?