假设我们只想在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初始化。

最佳答案

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

ASP.NET工作进程创建多个HttpApplication实例。出于性能目的将它们合并,但是对于您的Web应用程序,肯定可以有多个HttpApplication服务请求实例。

Here's a pretty good article on the subject

08-05 06:07