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

时间:2011-01-03 18:33:49

标签: c# asp.net-mvc-3 membership-provider

我正在实现一个自定义成员资格提供程序,在创建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

这只是随机开始工作,这意味着我改变了一些但不记得它是什么。愚蠢的大脑。如果我弄清楚问题是什么,我会接受已发布的唯一答案并更新。

2 个答案:

答案 0 :(得分:6)

我使用Membership.Provider.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
            );
    }

答案 1 :(得分:3)

还没有解决方案,但是通过以下两个功能,您至少可以了解注册的内容:

Membership.Provider

Membership.Providers

由于某些原因,我确实从MembershipUser继承了我的User类,但我很确定我有充分的理由: - )