在成员资格提供程序中,GetAllUsers在哪里?

8
我查看了会员提供程序的文档,会员提供程序应该有两个GetAllUsers方法(http://msdn.microsoft.com/en-us/library/system.web.security.membership.getallusers)。但是当我查看System.Web.Security暴露的方法时(在
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.ApplicationServices.dll )

它只有一个方法(具有分页功能的方法)。

我在哪里可以找到一个从数据库返回所有用户的方法?似乎没有办法获取所有用户列表或者找到数据库中有多少个用户。

--更新

查看System.Web.Security,我发现SqlMembershipProvider定义如下:

public class SqlMembershipProvider : System.Web.Security.MembershipProvider

但是这个类没有任何公共的GetAllUsers()方法。

我该如何访问它的基础GetAllUsers方法?


当你实际调用“Membership.GetAllUsers()”时会发生什么? - Tim B James
出现以下错误:错误17,方法“GetAllUsers”没有重载接受0个参数。 - mans
你使用的是哪个版本和类型(原始版/MVC)的ASP.Net? - Shane Courtrille
我正在使用带有 .Net 4 的 MVC 3。 - mans
嗨,曼斯,你找到解决方案了吗? - AGhosT
3个回答

0

它的工作方式是,您必须拥有您的成员资格提供程序,例如SqlMembershipProvider,在您的web.config中进行配置。 Membership.GetAllUsers方法将使用默认配置的MembershipProvider并调用其方法GetAllUsers,并传递0作为当前页面索引和int.MaxValue作为每页总记录数(以及一个out int来获取存储中的总记录数)。

如果您在调用此方法时遇到问题,请检查以下内容:

  • 请确保你已正确引用了以下 .net 程序集:
    • System.Web
    • System.Web.ApplicationServices
    • System.Configuration
  • 请确保你已正确引用命名空间 System.Web.Security,可以通过以下两种方式操作:
    • 在代码文件的顶部使用 using 语句引入该命名空间
    • 直接在引用类型中引入该命名空间
  • 请确保你的 web.config 文件中已注册默认的 MembershipProvider

注释

  • SqlMembershipProvider,它继承自MembershipProvider,并不是与类型Membership相同或相同类型层次结构的类型。因此,并非所有在Membership上看到的方法都可以在继承自MembershipProvider的类型上找到。
  • 类型 Membership 是静态的,因此它的所有成员,包括Membership.GetAllUsers,也都是静态的。
  • 类型Membership存在是为了方便,它的大多数成员都通过注册的默认MembershipProvider调用。

代码示例:

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

来自文档

备注

GetAllUsers 方法返回一个 MembershipUser 对象集合,其中包含应用程序中所有成员用户的信息。当使用 GetAllUsers 方法处理非常大的用户数据库时,请注意,由于在 ASP.NET 页面中生成的 MembershipUserCollection 可能会降低应用程序的性能。


0
问题是“Membership提供程序中的GetAllUsers在哪里?”
答案是它不在MembershipProvider中,而是在System.Web.Security.Membership中。
您在问题中提供的MSDN链接也说明了同样的事情。
GetAllUsers方法是静态和重载的。
int userCount = 0;
MembershipUserCollection muc1 =  System.Web.Security.Membership.GetAllUsers();
MembershipUserCollection muc2 = System.Web.Security.Membership.GetAllUsers(0, int.MaxValue, out userCount);

如果您遇到命名空间问题,.NET 3.5和.NET 4.0之间的一些内容已经重新排列。

几年前这让我困扰了一阵子。

.Net 4.0 System.Web.Security.MembershipProvider模糊引用?


0

我认为你应该在 System.Web.dll 而不是 System.Web.ApplicationServices.dll 中寻找。


查看这个动态链接库,我发现: - mans
你不是在寻找System.Web.Security.Membership.GetAllUsers()吗?它在Membership中,而不是SqlMembershipProvider。 - bwbrowning
我无法通过SqlMembershipProvider访问它。 - mans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接