2010-12-19 76 views
4

MvcApplication.Init Modules集合中只有一個條目,名爲「__ASP_IntegratedDynamicModule_Shim」。在我的webforms應用程序中,大約有13個模塊,其中之一是「FormsAuthentication」。MvcApplication.Modules在MVC 3中令人驚訝地爲空。

在我的webforms應用程序中,我重寫了HttpApplication.Init,然後使用Modules [「FormsAuthentication」]來獲取FormsAuthenticationModule並連線到它的Authenticate事件以替換我自己的處理程序。我不知道如何做到這一點,現在我移動到MVC 3.

窗體auth模塊顯然運行在我的管道,因爲身份驗證模式=「窗體」工作正常(我可以登錄和使用標準的FormsAuthentication技術)。我正在使用集成了ASP.NET 4.0管道的IIS 7。

其他人注意到這一點嗎?我可能只是在做一些非常愚蠢的事情......

回答

2

在集成管道中,您的Init()方法將運行多次。由於MVC 3將自身掛接到ASP.NET管道中,第一次調用Init()可能會包含一個空模塊集合。隨後的調用應該包含您正在查找的模塊。

我建議修改你的Init()代碼,說Module [「FormsAuthentication」]不存在,no-op。您的代碼最終會再次被調用,並且您最終可以掛鉤該事件。

+0

謝謝,列維。在WebForms中,我習慣於看到Init多次調用,IIRC是初始化一個對象池以處理不同線程上的同時傳入請求。我從來沒有看到它在這種不完整的狀態下這樣稱呼。在調整代碼之後,第一次不會失敗,當然,第二次通過管道初始化爲17個模塊。看起來這是一個非常合理的解決方案。 – 2010-12-20 12:46:14