我正在实现一个自定义成员资格提供程序,在创建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
这只是随机开始工作,这意味着我改变了一些但不记得它是什么。愚蠢的大脑。如果我弄清楚问题是什么,我会接受已发布的唯一答案并更新。
答案 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类,但我很确定我有充分的理由: - )