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