2008-11-14 67 views
3

基本上,我試圖寫在ASP.NET的HttpModule以下(僞):ASP.NET HttpModule - 保證執行前後處理程序代碼?

*pre-code* 
try { handler.ProcessRequest(...) } 
catch (Exception) { *error-code* } 
finally { *post-code* } 

我發現我可以掛接到HttpModule.PreExecuteHandler爲「預編碼」和.Error爲「錯誤代碼」。但是PostExecuteHandler似乎並不可靠。

BeginRequest和EndRequest運行可靠,但對於我需要編寫的代碼來說還爲時過早,這需要檢查選擇執行的處理程序。直到BeginRequest之後纔會選擇處理程序。

是否有寫這種包裝的最佳做法?

謝謝!

回答

2

沒有辦法做你想做的事情(在HttpModule中,至少),除非不調用Response.End。 This article解釋得很好,並提供了一個替代Response.End的情況下,它是您稱爲Server.Transfer的副作用。

+0

感謝 - 這正是我所期待的,不是爲Server.Transfer,而是爲Request.End()。 PostRequestHandlerExecute肯定不會執行,但我認爲即使在這種情況下EndRequest也會被調用?哦,我會去測試... – 2008-11-18 21:06:32

-2

添加到您的Global.asax文件:

protected void Application_PreRequestHandlerExecute(object sender, EventArgs e) 
{ 
    // 
} 

protected void Application_PostRequestHandlerExecute(object sender, EventArgs e) 
{ 
    // 
} 

應工作100%。

+0

謝謝,我很欣賞答案 - 但我希望在沒有Global.ASAX文件的情況下在HttpModule中執行此操作。另外,我相信(但還沒有在ASAX中測試過)如果有人在處理程序中執行了Response.End,PostRequestHandlerExecute將永遠不會運行。只有結束事件將..(?) – 2008-11-17 15:38:06