簡體   English   中英

ASP.NET MVC3自定義成員資格提供程序 - 指定的成員資格提供程序名稱無效

[英]ASP.NET MVC3 Custom Membership Provider - The membership provider name specified is invalid

我正在實現一個自定義成員資格提供程序,在創建MembershipUser對象之前,所有內容似乎都在游動。 那時,我收到錯誤:

指定的成員資格提供程序名稱無效。 參數名稱:providerName

web.config ,成員資格密鑰是

<membership defaultProvider="MembersProvider">
  <providers>
    <clear/>
    <add name="MembersProvider" type="Members.Providers.MembersProvider" connectionStringName="ApplicationServices"
         enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
         applicationName="DeviceDatabase" />
  </providers>
</membership>

從我的自定義User類創建MembershipUser對象時:

    public static MembershipUser ToMembershipUser(User user)
    {
        MembershipUser member = new MembershipUser
            ("MembersProvider"
            , user.Name
            , user.Id
            , user.EmailAddress
            , user.PasswordQuestion
            , user.Comment
            , user.IsApproved
            , user.IsLockedOut
            , user.DateCreated
            , user.LastLoginDate ?? DateTime.MinValue
            , user.LastActivityDate ?? DateTime.MinValue
            , user.LastPasswordChangedDate ?? DateTime.MinValue
            , user.LastLockoutDate ?? DateTime.MinValue
            );

        return member;
    }

(我意識到我可能只是從MembershipUser繼承我的User類,但它已經是現有類層次結構的一部分。老實說,我認為這是我第一次遇到多重繼承的合法需求!)

我的感覺是new MembershipUser(...) providerName參數應該與web.config設置的匹配,但是,因為它們已經匹配,所以我不知道如何繼續。

有沒有方便的方法來獲取代碼中的活動成員資格提供程序的名稱?

我開始認為使用內置會員系統是過度殺傷,而且比它的價值更麻煩。

編輯不確定它是否相關,但自定義成員資格提供程序類位於類庫中,而不是主WAP項目中。

更新此處是VS2010命令窗口中顯示的System.Web.Security.Membership.Provider對象的內容:

>eval System.Web.Security.Membership.Provider
{Members.Providers.MembersProvider}
    [Members.Providers.MembersProvider]: {Members.Providers.MembersProvider}
    base {System.Configuration.Provider.ProviderBase}: {Members.Providers.MembersProvider}
    ApplicationName: null
    EnablePasswordReset: true
    EnablePasswordRetrieval: false
    MaxInvalidPasswordAttempts: 5
    MinRequiredNonAlphanumericCharacters: 0
    MinRequiredPasswordLength: 6
    PasswordAttemptWindow: 10
    PasswordFormat: Function evaluation was aborted.
    PasswordStrengthRegularExpression: Cannot evaluate expression because debugging information has been optimized away .
    RequiresQuestionAndAnswer: Cannot evaluate expression because debugging information has been optimized away .
    RequiresUniqueEmail: Cannot evaluate expression because debugging information has been optimized away .

更新2

這只是隨機開始工作,這意味着我改變了一些但不記得它是什么。 愚蠢的大腦。 如果我弄清楚問題是什么,我會接受已發布的唯一答案並更新。

我使用Membership.Provider.Name來獲取正確的name參數

    public static MembershipUser GetUserFromEntity(this UserEntity userEntity)
    {
        return new MembershipUser(
                Membership.Provider.Name, 
                userEntity.Username,
                userEntity.PartitionKey,
                userEntity.Email,
                userEntity.PasswordQuestion,
                userEntity.Comment,
                userEntity.IsApproved,
                userEntity.IsLockedOut,
                userEntity.CreationDate,
                userEntity.LastLoginDate,
                userEntity.LastActivityDate,
                userEntity.LastPasswordChangedDate,
                userEntity.LastLockedOutDate
            );
    }

還沒有解決方案,但是通過以下兩個功能,您至少可以了解注冊的內容:

Membership.Provider

Membership.Providers

我確實因為某些原因從MembershipUser繼承了我的User類,但我很確定我有充分的理由:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM