2013-05-19 81 views
0

爲了更好地理解如何在.net MVC4應用程序中創建auth功能,我想我會分解「Internet應用程序」模板生成的網站。最終,我正在研究如何實現聲明感知的內容(例如:https://github.com/brockallen/BrockAllen.MembershipReboot.net 4.5 Web.Security.Membership.Providers刪除拋出system.notsupported異常。爲什麼?

作爲此部分,我發現自己正在查看WebMatrix.WebData.WebSecurity.PreAppStartInit()方法,其中包含下面的代碼:

const string BuiltInMembershipProviderName = "AspNetSqlMembershipProvider"; 
    var builtInMembership = Membership.Providers[BuiltInMembershipProviderName]; 
    if (builtInMembership != null) 
    { 
     var simpleMembership = CreateDefaultSimpleMembershipProvider(BuiltInMembershipProviderName, currentDefault: builtInMembership); 
     Membership.Providers.Remove(BuiltInMembershipProviderName); 
     Membership.Providers.Add(simpleMembership); 
    } 

如果我嘗試在點Membership.Providers.Remove(BuiltInMembershipProviderName);運行在一個控制檯應用程序類似的東西,它拋出一個System.NotSupportedException被調用。如果該集合已調用SetReadOnly方法,但這種情況尚未發生,那麼這是可以預料的。我不知道爲什麼會出現在控制檯應用程序代碼中,但不是Web應用程序。有人有主意嗎?

回答

0

這讓我困惑了一陣子。訣竅是這個初始化的時間。它需要在很早的階段進行。當您在WebMatrix.WebData名稱空間中進行挖掘時,還有其他幾件事要看看它是如何工作的。

有施加PreApplicationStartMethod組件屬性:

[assembly: PreApplicationStartMethod(typeof(PreApplicationStartCode), "Start")]

此屬性中指定的方法將被調用作爲應用程序的啓動序列的一部分。 PreApplicationStartCode.Start()方法將調用WebSecurity.PreAppStartInit()以及執行一些其他配置任務。

您可以通過做同樣的事情自己複製此功能。將PreApplicationStartMethod屬性添加到您的程序集中,並讓它調用您自己的「啓動」方法。在此階段,您將可以使用會員提供商收藏。

相關問題