2010-12-19 8 views
4

Ich war überrascht, dass in MvcApplication.Init die Module-Auflistung nur einen Eintrag enthält, namens "__ASP_IntegratedDynamicModule_Shim". In meiner Webforms-App gab es etwa 13 Module, von denen eines "FormsAuthentication" war.MvcApplication.Modules ist überraschend leer in MVC 3

In meiner Webforms App überschreibe ich HttpApplication.Init, dann verwenden Module ["FormsAuthentication"], um das FormsAuthenticationModule zu greifen und mit seinem Authenticate-Ereignis zu verbinden, um meinen eigenen Handler zu ersetzen. Ich bin mir nicht sicher, wie dies jetzt zu tun, dass ich auf MVC 3 bin.

Die Formulare Auth-Modul läuft eindeutig in meiner Pipeline, weil Authentifizierungsmodus = "Formulare" funktioniert gut (ich kann einloggen und Verwenden Sie die Standard-FormsAuthentication-Techniken). Ich verwende IIS 7 mit einer integrierten ASP.NET 4.0-Pipeline.

Sonst jemand bemerkt das? Ich mache wahrscheinlich nur etwas wirklich dummes ...

Antwort

2

In der integrierten Pipeline wird Ihre Init() -Methode mehrmals ausgeführt. Aufgrund der Art, wie sich MVC 3 in die ASP.NET-Pipeline einklinkt, enthält der erste Aufruf von Init() möglicherweise eine leere Modulauflistung. Nachfolgende Aufrufe sollten das Modul enthalten, nach dem Sie suchen.

Ich würde empfehlen, Ihren Init() Code zu ändern, um zu sagen, wenn Module ["FormsAuthentication"] nicht existiert, no-op. Ihr Code wird schließlich erneut aufgerufen, und Sie können schließlich dieses Ereignis haken.

+0

Danke, Levi. In WebForms bin ich daran gewöhnt, dass Init mehr als einmal aufgerufen wurde, IIRC das war, um einen Pool von Objekten zu initialisieren, um gleichzeitig eingehende Anfragen auf verschiedenen Threads zu behandeln. Ich hatte es nie so in einem etwas unvollständigen Zustand gesehen. Nachdem der Code so optimiert wurde, dass er beim ersten Mal nicht fehlschlägt, wurde das zweite Mal durch die Pipeline mit 17 Modulen initialisiert. Sieht so aus, als ob das eine sehr vernünftige Lösung ist. –