1

我已经完成了几个 ASP.NET MVC 1 和 2 站点。不知何故,我设法跳过了 v3。我现在正在创建一个新的 ASP.NET MVC 4 站点,并且我看到所有的 Membership 内容已经完全改变了。

一开始我很高兴。它看起来很容易设置和使用,并且 Internet 项目模板附带了我开始所需的所有类和视图。

不幸的是,我现在完全卡住了。我需要扩展验证用户的代码。基本上,我需要根据 Web 服务对一些用户进行身份验证,并根据本地数据库对其他用户进行身份验证。两种类型的用户都将在本地数据库中存储配置文件数据。

我的问题是我找不到任何扩展 SimpleMembership 的方法。

在旧的 Membership 提供程序模型下,我会尝试从 SqlMembership 继承并覆盖 ValidateUser() 并调用基类或调用 Web 服务。

我确实尝试做类似的事情,在我的项目中创建一个继承自 SimpleMembership 的类,然后将其配置为 web.config 中的默认成员资格提供程序,但这只是给了我错误

Parser Error Message: This method cannot be called during the application's pre-start initialization phase.

Line 32:     <membership defaultProvider="ssund">
Line 33:       <providers>
Line 34:         <add name="ssund" type="Ssund.Web.Providers.SsundSimpleMembershipProvider"/>
Line 35:       </providers>
Line 36:     </membership>
4

2 回答 2

3

SimpleMembership中没有配置,web.configInitializeSimpleMembershipAttribute.cs文件中完成。

不幸的是,所使用的 WebSecurity 类的实现无法扩展,它对 SimpleMembershipProvider 的使用进行了硬编码。

您不必使用 SimpleMembership。您可以回退到使用旧的会员提供者基础设施。

于 2012-10-28T22:18:10.613 回答
1

您可以扩展SimpleMembershipProvider,但由于初始化提供程序的方式不寻常且限制性,这不是一个愉快的体验。

尽管提供程序是通过调用初始化的WebSecurity.InitializeDatabaseConnection,但通过显式设置提供程序Web.Config同样有效。如果它们扩展自SimpleMembershipProvider它们将在初始化期间正确配置。

实际上,您可以只实现自己的 APIExtendedMembershipProvider以使用WebSecurityAPI,而根本不调用WebSecurity.InitializeDatabaseConnection(它仅用于SimpleMembershipProvider基于实现)。缺点是从头开始构建它需要做很多工作。

您遇到的错误可能是由于在管道早期与提供程序的交互引起的,可能是因为您在Initialize提供程序的例程中执行了某些操作。

See SimpleMembershipProvider vs MembershipProvider for more information of the differences between SimpleMembershipProvider and MembershipProvider. And take a look at BetterMembership.Net for an example of extending the SimpleMembershipProvider.

于 2013-10-03T22:32:44.817 回答