根据this MSDN article HttpApplication .EndRequest可用于关闭或处置资源。但是,在我的应用程序中不会触发/调用此事件。
我们通过以下方式在Page_Load中附加处理程序:
HttpContext.Current.ApplicationInstance.EndRequest += ApplicationInstance_EndRequest;
唯一的方法是在Global.asax中使用Application_EndRequest处理程序,但这对我们来说是不可接受的。
答案 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处理程序中完成工作。