2009-09-07 44 views
11

我試圖在ASP.NET MVC 2預覽版1應用程序中實現會話每請求模式,並且我已經實現了一個IHttpModule來幫助我執行此操作:ASP.NET MVC的HttpModule沒有被調用

public class SessionModule : IHttpModule 
{ 
    public void Init(HttpApplication context) 
    { 
     context.Response.Write("Init!"); 
     context.EndRequest += context_EndRequest; 
    } 
    // ... etc... 
} 

而且我要把它放到web.config中: 「初始化」

<system.web> 
    <httpModules> 
     <add name="SessionModule" type="MyNamespace.SessionModule" /> 
    </httpModules> 

    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="SessionModule" /> 
     <add name="SessionModule" type="MyNamespace.SessionModule" /> 
    </modules> 

然而,永遠不會寫入頁面(我正在使用內置的VS Web服務器Cassini)。另外,我嘗試在SessionModule中放置斷點,但它們永遠不會中斷。我錯過了什麼?

回答

14

原來在Views文件夾中有一個Web.config文件,而在根目錄中有一個。猜猜哪一個我註冊了httpModules?是的,視圖文件夾之一。我將它移動到根Web.config,現在它就像一個魅力。

+2

+1,因爲那正是我所做的,而這正是促使我仔細檢查的原因:/ – 2010-09-18 14:29:51

+3

尚未完成但尚未完成。 +1 – Dave 2010-09-27 10:20:23

1

您可能必須將Response.Write放在訂閱EndRequest(或BeginRequest)事件的方法中。我猜Init對象在Init階段還沒有完全初始化。

+0

這沒有奏效 - > var app =(HttpApplication)sender; app.Context.Response.Write( 「EndRequest!」); – 2009-09-07 22:31:41

1

我的問題是我在Controller Method上有[HandleError],在我的自定義錯誤處理程序有機會之前捕獲錯誤。