ASP.NET HttpModule - 保证执行前处理程序代码和后处理程序代码?

时间:2008-11-14 07:27:36

标签: c# asp.net httpmodule

基本上,我正在尝试在ASP.NET HttpModule中编写以下(伪代码):

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

我发现我可以为“pre-code”挂钩HttpModule.PreExecuteHandler,为“错误代码”挂钩.Error。但PostExecuteHandler似乎没有可靠运行。

BeginRequest和EndRequest运行可靠,但对于我需要编写的代码来说太早了,这需要检查选择执行的处理程序。直到BeginRequest之后才选择处理程序。

编写这种包装器是否有最好的做法?

谢谢!

2 个答案:

答案 0 :(得分:2)

除了不调用Response.End之外,没有办法做你想要的(至少在HttpModule中)。 This article很好地解释了它并提供了Response.End的替代方法,以防它被称为Server.Transfer的副作用。

答案 1 :(得分:-2)

将此添加到您的Global.asax文件中:

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

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

这应该100%工作。