[英]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.