2012-10-28 72 views
1

我已經完成了多個ASP.NET MVC 1和2站點。不知何故,我設法跳過v3。 我現在正在創建一個新的ASP.NET MVC 4站點,並且我看到所有的成員資格都完全改變了。如何擴展ASP.NET MVC4中的SimpleMembership身份驗證

起初我很高興。它看起來很容易設置和使用,Internet項目模板帶有我需要開始的所有類和視圖。

不幸的是,我現在完全卡住了。我需要擴展認證用戶的代碼。基本上,我需要根據本地數據庫對Web服務和其他用戶進行身份驗證。兩種類型的用戶都將具有存儲在本地數據庫中的配置文件數據。

我的問題是,我找不到任何延伸SimpleMembership的方式。

在舊的成員資格提供者模型下,我會繼續從SqlMembership繼承並重寫ValidateUser()並調用基類或調用Web服務。

我曾嘗試做這樣的事情,我的創造在我的項目的一類,從SimpleMembership inherites,然後將其配置爲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> 

回答

1

您可以擴展SimpleMembershipProvider,但由於提供程序初始化的不正常和限制性方式,這不是一個愉快的體驗。

雖然供應商通過致電WebSecurity.InitializeDatabaseConnection進行初始化,但明確地通過Web.Config設置供應商也同樣有效。如果它們從SimpleMembershipProvider延伸,它們將在初始化期間正確配置。

事實上你可能只是實現自己的使用ExtendedMembershipProviderWebSecurity的API,而不是調用WebSecurity.InitializeDatabaseConnection在所有(這只是爲SimpleMembershipProvider基於實現)。缺點是從零開始構建這項工作有很多工作要做。

您得到的錯誤可能是由於與提供程序在早期交互中導致的錯誤,可能是因爲您在提供程序的Initialize例程中執行了某些操作。

有關SimpleMembershipProviderMembershipProvider之間差異的更多信息,請參閱SimpleMembershipProvider vs MembershipProvider。請參閱BetterMembership.Net以瞭解延伸SimpleMembershipProvider的示例。

3

SimpleMembership未配置在web.config中,它在InitializeSimpleMembershipAttribute.cs文件中完成。

不幸的是,所使用的WebSecurity類的實現不能被擴展,它使用SimpleMembershipProvider硬編碼。

您不必使用SimpleMembership。您可以重新使用舊的成員資格提供程序基礎結構。