为什么没有办法在IHttpModule初始化范围外解绑定HttpApplication事件处理程序?

本文关键字:绑定 HttpApplication 事件处理 程序 范围 初始化 IHttpModule 为什么 | 更新日期: 2023-09-27 17:54:24

假设我们想在web应用程序启动后和web请求期间只执行一次或几次操作。

public class WebApp : HttpApplication
{
    public override void Init()
    {
        base.Init();
        this.BeginRequest += new EventHandler(this.OnFirstBeginRequest);
    }
    private void OnFirstBeginRequest(object sender, EventArgs e)
    {
        // do some action and if everything is OK, unbind this handler,
        // because we need it executed only once at the first web request
        this.BeginRequest -= new EventHandler(this.OnFirstBeginRequest);
    }
}

将抛出以下异常:

事件处理程序只能绑定到HttpApplication事件IHttpModule初始化。

为什么没有办法在IHttpModule初始化范围外解绑定HttpApplication事件处理程序?

HttpApplication实例中使用事件处理程序来对应用程序的第一个请求执行一些代码是没有意义的,因为每次创建新的HttpApplication实例时,它都会重新绑定这些事件,并且事件处理程序中的代码将再次运行。

ASP创建了多个HttpApplication实例。. NET工作进程。出于性能的考虑,它们被集中在一起,但是对于您的web应用程序,肯定可以有多个HttpApplication服务请求实例。

这里有一篇很好的关于这个主题的文章