我已经完成了几个ASP.NET MVC 1和2站点。不知何故,我设法跳过v3。 我现在正在创建一个新的ASP.NET MVC 4站点,我发现所有会员资料都已完全改变。
起初我很高兴。它看起来很容易设置和使用,Internet项目模板附带了我开始所需的所有类和视图。
不幸的是,我现在完全卡住了。我需要扩展验证用户身份的代码。基本上,我需要根据Web服务和其他用户对本地数据库进行身份验证。两种类型的用户都将配置文件数据存储在本地数据库中。
我的问题是我无法找到任何扩展SimpleMembership的方法。
在旧的Membership provider模型下,我会尝试继承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>
答案 0 :(得分:3)
SimpleMembership
未在web.config
中配置,已在InitializeSimpleMembershipAttribute.cs
文件中完成。
不幸的是,使用的WebSecurity类的实现无法扩展,它难以编码SimpleMembershipProvider的使用。
您不必使用SimpleMembership。您可以回退使用旧的成员资格提供程序基础结构。
答案 1 :(得分:1)
您可以扩展SimpleMembershipProvider
但由于提供程序初始化的不寻常和限制性方式,这不是一种愉快的体验。
尽管通过调用WebSecurity.InitializeDatabaseConnection
初始化了提供程序,但通过Web.Config
显式设置提供程序同样有效。如果它们从SimpleMembershipProvider
延伸,则在初始化期间将正确配置它们。
实际上,您可以实现自己的ExtendedMembershipProvider
以用于WebSecurity
API,而不是根本调用WebSecurity.InitializeDatabaseConnection
(仅适用于基于SimpleMembershipProvider
的实现)。缺点是从头开始构建这个是很多工作。
您获得的错误可能是因为您在提供程序的早期与提供程序进行交互,可能是因为您在提供程序的Initialize
例程中执行了某些操作。
有关SimpleMembershipProvider
和MembershipProvider
之间差异的详情,请参阅SimpleMembershipProvider vs MembershipProvider。请查看BetterMembership.Net以获取扩展SimpleMembershipProvider
。