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

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

我正在实现自定义成员资格提供程序,在我创建 MembershipUser 对象之前,一切似乎都很顺利。那时,我收到错误:

The membership provider name specified is invalid. Parameter name: providerName

web.config 中,成员 key 是

<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>

从我的自定义用户类创建 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 中的设置相匹配,但是,由于它们已经匹配,我'不知道如何进行。

有没有方便的方法在代码中获取事件成员(member)提供商的名称?

我开始认为使用内置的成员(member)系统有点矫枉过正,而且麻烦得不偿失。

编辑 不确定它是否相关,但自定义成员资格提供程序类在类库中,而不是主 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 来获取正确的名称参数

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

关于c# - ASP.NET MVC3 自定义成员资格提供程序 - 指定的成员资格提供程序名称无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4587187/

相关文章:

asp.net-mvc-3 - Azure/SSL 在生产中的暂存角色中发挥作用

c# - ASP.NET MVC 自定义成员资格提供程序 - 如何重载 CreateUser?

asp.net - 将 SQL server 2008 用于 ASP.net 2.0 Membership provider

asp.net-mvc - 使用Html.DropDownList禁用选择列表

asp.net-mvc - 使用单个 ASP .NET MVC 下拉列表编辑两个值的好方法是什么?

c# - rsacryptoserviceprovider.VerifyData 总是返回 false

c# - 将字符串数组或 6 个字符串传递给构造函数是否更有效?

asp.net-mvc-3 - 带有 SqlCeMembership 的 Asp.net 网站管理工具

c# - 为每个 GeckoFx 实例使用不同的代理

c# - 在 C# 中强制关闭对话框