简体   繁体   English

ASP.NET MVC3自定义成员资格提供程序 - 指定的成员资格提供程序名称无效

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

I'm implementing a custom membership provider, and everything seems to go swimmingly until I create a MembershipUser object. 我正在实现一个自定义成员资格提供程序,在创建MembershipUser对象之前,所有内容似乎都在游动。 At that point, I receive the error: 那时,我收到错误:

The membership provider name specified is invalid. 指定的成员资格提供程序名称无效。 Parameter name: providerName 参数名称:providerName

In web.config the membership key is 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>

When creating the MembershipUser object from my custom User class: 从我的自定义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;
    }

(I realize I could probably just inherit my User class from MembershipUser, but it's already part of an existing class hierarchy. I honestly think this is the first time I've encountered a legitimate need for for multiple inheritance!) (我意识到我可能只是从MembershipUser继承我的User类,但它已经是现有类层次结构的一部分。老实说,我认为这是我第一次遇到多重继承的合法需求!)

My feeling is that the new MembershipUser(...) providerName parameter is supposed to match what's set in web.config , but, since they match already, I'm at a loss as to how to proceed. 我的感觉是new MembershipUser(...) providerName参数应该与web.config设置的匹配,但是,因为它们已经匹配,所以我不知道如何继续。

Is there a convenient way to get the name of the active membership provider in code? 有没有方便的方法来获取代码中的活动成员资格提供程序的名称?

I'm starting to think that using the built-in membership system is overkill and more trouble than it's worth. 我开始认为使用内置会员系统是过度杀伤,而且比它的价值更麻烦。

Edit Not sure if it's relevant, but the custom membership provider class is in a class library, not the main WAP project. 编辑不确定它是否相关,但自定义成员资格提供程序类位于类库中,而不是主WAP项目中。

Update Here's the contents of the System.Web.Security.Membership.Provider object as show in the VS2010 command window: 更新此处是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 .

Update 2 更新2

This just randomly started working, which means I changed something but can't remember what it was. 这只是随机开始工作,这意味着我改变了一些但不记得它是什么。 Stupid brain. 愚蠢的大脑。 I'll accept the only answer that's been posted and update this if I figure out what the problem was. 如果我弄清楚问题是什么,我会接受已发布的唯一答案并更新。

I used Membership.Provider.Name to get the correct name parameter 我使用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
            );
    }

Not the solution yet, but with the two following functions you can at least get an idea what is registered: 还没有解决方案,但是通过以下两个功能,您至少可以了解注册的内容:

Membership.Provider

Membership.Providers

I did inherit my User class from MembershipUser for some reason, but I'm pretty sure I had a good reason for it :-) 我确实因为某些原因从MembershipUser继承了我的User类,但我很确定我有充分的理由:-)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM