8

メンバーシップ プロバイダーのドキュメントを確認したところ、メンバーシップ プロバイダーには 2 つの 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 )

メソッドは 1 つだけです (ページング機能を持つメソッド)。

データベースからすべてのユーザーを返す方法はどこにありますか? すべてのユーザーのリストを取得したり、データベース内のユーザー数を確認したりする方法はないようです。

- アップデート

System.Web.Security を見ると、SqlMembershipProvider が次のように定義されていることがわかりました。

public class SqlMembershipProvider : System.Web.Security.MembershipProvider

しかし、このクラスには public GetAllUsers() メソッドがありません。

ベースの GetAllUsers メソッドにアクセスするにはどうすればよいですか?

4

3 に答える 3

0

System.Web.ApplicationServices.dllではなくSystem.Web.dllを調べる必要があると思います

于 2012-05-18T10:18:50.883 に答える
0

問題は、「メンバーシップ プロバイダーの 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 あいまいな参照?

于 2016-04-22T17:51:08.200 に答える
0

それが機能する方法は、 SqlMembershipProviderのようなメンバーシップ プロバイダーを.xmlで構成する必要があるということですweb.config。次に、Membership.GetAllUsersメソッドは、構成された既定値を取得し、MembershipProviderそのメソッドGetAllUsers0を呼び出して、現在のページ インデックスとページごとの合計レコードを渡します (ストア内の合計レコードを取得するためのint.MaxValueも同様です)。out int

このメソッドの呼び出しに問題がある場合は、次の点を確認してください。

  • 正しい .net アセンブリが参照されている
    • System.Web
    • System.Web.ApplicationServices
    • System.Configuration
  • 正しい名前空間が参照System.Web.Securityされている
    • usingファイルの上部にあるステートメントで
    • 参照されている型に直接
  • デフォルトweb.configが登録されていますMembershipProvider

ノート

  • から派生したSqlMembershipProviderMembershipProviderは、 type と同じ型または型階層ではありませんMembership。したがって、 で表示されるすべてのメソッドがMembershipから派生した型で見つかるわけではありませんMembershipProvider
  • タイプMembershipは静的であるため、Membership.GetAllUsersを含むすべてのメンバーも静的です。
  • タイプMembershipは便宜上存在し、そのメンバーのほとんどは登録済みの default を呼び出します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 によって、アプリケーションのパフォーマンスが低下する可能性があります。

于 2016-04-19T10:15:35.120 に答える