1

我在 VS2012 中创建了一个新的 MVC 4 项目,现在尝试使用我创建的自定义成员资格提供程序时遇到问题,它继承自MembershipProvider.

AccountController.Login方法抛出此异常:

要调用此方法,“Membership.Provider”属性必须是“ExtendedMembershipProvider”的一个实例。

禁用enableSimpleMembershipautoFormsAuthentication(如asp.net 4.5 自定义成员资格提供程序配置中所建议的会引发奇怪的异常)没有任何区别。

删除WebMatrix.WebData.dll, 导致AccountController无法编译,因为它引用WebMatrix.WebData.WebSecurity

这些是我采取的步骤:

  • 在 VS 2012 中创建一个新的 APS.NET MVC 4 项目 (.net 4.0)

  • 添加一个名为CustomMembershipProvider实现的新类MembershipProvider

  • web.config集合中enableSimpleMembership = falseautoFormsAuthentication = false在中appSettings添加成员资格提供者system.web

  • 在调试中启动网站,然后单击页面上的“登录”

  • 输入用户名和密码的任何旧文本

我得到了例外:

要调用此方法,“Membership.Provider”属性必须是“ExtendedMembershipProvider”的实例

有任何想法吗?

4

1 回答 1

2

我按照你的步骤,使用 VS.Net 2010,并且能够重现异常。

如异常所示,这可以通过实现 ExtendedMembershipProvider 而不是 MembershipProvider 来解决。

ExtendedMembershipProvider 位于程序集 WebMatrix.WebData.dll 和命名空间 WebMatrix.WebData 中。它定义了比 MembershipProvider 更多的抽象方法和属性,例如 GeneratePasswordResetToken 和 GetLastPasswordFailureDate,所有这些都是您需要实现的。

首先,您可以简单地使用上下文菜单中的实现抽象类: ExtendedMembershipProvider,看看它是否适合您,就像它对我一样。

如果您从重现步骤开始,将 ValidateUser 的正文替换为return true;将允许您使用任何用户名和密码成功登录。

于 2013-01-09T21:22:11.087 回答