ASP.NET HttpApplication.EndRequest事件未被触发

时间:2008-10-27 13:07:51

标签: .net asp.net

根据this MSDN article HttpApplication .EndRequest可用于关闭或处置资源。但是,在我的应用程序中不会触发/调用此事件。

我们通过以下方式在Page_Load中附加处理程序:

HttpContext.Current.ApplicationInstance.EndRequest += ApplicationInstance_EndRequest;

唯一的方法是在Global.asax中使用Application_EndRequest处理程序,但这对我们来说是不可接受的。

4 个答案:

答案 0 :(得分:14)

如果您不想使用global.asax,可以使用自己的HttpModule捕获EndRequest。

public class CustomModule : IHttpModule 
{
    public void Init(HttpApplication context)
    {
        context.EndRequest += new EventHandler(context_EndRequest);
    }

    private void context_EndRequest(object sender, EventArgs e)
    {
        HttpContext context = ((HttpApplication)sender).Context;
        // use your contect here
    }
}

您需要将模块添加到web.config

<httpModules>
    <add name="CustomModule" type="CustomModule"/>
</httpModules>

答案 1 :(得分:5)

根据MSDN文档,此事件在页面完成后发生,就像BeginRequest一样。因此,据我所知,在页面级别无法捕捉到这一点

答案 2 :(得分:3)

我认为链接此事件的更好方法是为global.asax提供基类

Language="C#" Inherits="YourBaseClass"

然后重写Init():

public override void Init()
{
    base.Init();

    BeginRequest += new EventHandler(OnBeginRequest);
    EndRequest += new EventHandler(OnEndRequest);
}

似乎对我有用(抓住一个断点),但我真的在做任何事情。

由于存在多个HttpApplication实例,因此在Page_load中设置它可能会继续将其添加到非特定实例。奇怪的是,我也注意到第一个HttpApplication实例(但是Application_start)没有调用HttpApplication.Init()。

答案 3 :(得分:1)

页面可能在事件触发前被处理掉。您可能希望尝试在Page_Unload处理程序中完成工作。