我想要做的是使用随Visual Studio 2012一起提供的默认MVC 4模板作为我的新项目的基础。但是,我想用自定义成员资格提供程序替换SQL提供程序,以便可以访问RavenDB来获取用户。我已经像以前一样实现了自定义提供程序,但是WebSecurity方法抛出以下异常。
这行代码:
具体的方法是:
抛出此异常:
现在,我无法调用InitializeDatabaseConnection,因为我的提供程序不是SQL提供程序。此方法需要一个SQL提供程序和一个SQL连接字符串。这是一个普遍的问题还是我错过了什么?为什么必须初始化WebSecurity?为什么要仅使用SQL提供程序将其连接?
我是否只需要更改代码以不使用WebSecurity类?
我整天都在这里,我很累。我希望我不要忽视一些简单的事情。也许再喝一杯朗姆酒和可乐会有所帮助。
更新:2012年8月19日
我反编译了GetUserId方法,发现它失败的唯一原因是因为VerifyProvider调用。
public static int GetUserId(string userName)
{
WebSecurity.VerifyProvider();
MembershipUser user = Membership.GetUser(userName);
if (user == null)
return -1;
else
return (int) user.ProviderUserKey;
}
private static ExtendedMembershipProvider VerifyProvider()
{
ExtendedMembershipProvider membershipProvider = Membership.Provider as ExtendedMembershipProvider;
if (membershipProvider == null)
throw new InvalidOperationException(WebDataResources.Security_NoExtendedMembershipProvider);
membershipProvider.VerifyInitialized();
return membershipProvider;
}
现在,VerifyProvider方法失败的唯一原因是由于对VerifyInitialized的调用,我无法在我的成员资格提供程序中覆盖该调用。另外,如果它没有调用我的提供程序,那么我不确定在处理VerifyInitialized时正在调用什么代码。
internal virtual void VerifyInitialized()
{
}
我要删除Web.Config中的所有其他成员资格提供程序。至少我认为我是。这是条目。
<membership defaultProvider="RavenMembershipProvider">
<providers>
<clear />
<add name="RavenMembershipProvider" type="BigGunsGym.Infrastructure.Providers.RavenMembershipProvider" />
</providers>
</membership>
最佳答案
原来,我的提供程序是从SimpleMembershipProvider继承而来的,而不是ExtendedMembershipProvider。我以为这是可以的,因为SimpleMembershipProvider继承了ExtendedMembershipProvider,但是它没有用。
将我的提供程序更改为从ExtendedMembershipProvider继承后,错误消失了。
关于asp.net-membership - 具有自定义成员资格提供程序的MVC 4模板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12023924/