你选看看这个!
任何由 HttpApplication 类引发的公共事件都使用语法 Application_EventName 支持。例如,Error 事件的处理程序可以声明为 protected void Application_Error(Object sender, EventArgs e)。另外,也对异步事件提供支持。公共事件有三类:HttpApplication 引发的应用程序事件、HTTP 模块引发的模块事件和 HTTPApplication 引发的异步事件。应用程序事件
下表显示在应用程序生存期内由 HttpApplication 引发的事件。第一个表显示在应用程序执行前引发的事件。这些事件按它们的发生顺序列出。事件 说明 
BeginRequest 发出信号表示新的请求;一定会对每个请求引发。 
AuthenticateRequest 发出信号表示请求已准备好进行身份验证;由安全模块使用。 
AuthorizeRequest 发出信号表示请求已准备好被授权;由安全模块使用。 
ResolveRequestCache 输出缓存模块用来对已缓存的请求进行“短路”处理。 
AcquireRequestState 发出信号表示应获取针对每一个请求的状态。 
PreRequestHandlerExecute 发出信号表示将执行请求处理程序。这是在调用该请求的 HTTP 处理程序前可以参与的最后一个事件。 下一个表显示在应用程序已返回后引发的事件。这些事件按它们的发生顺序列出。事件 说明 
PostRequestHandlerExecute 发出信号表示 HTTP 处理程序已完成对请求的处理。 
ReleaseRequestState 发出信号表示应该存储请求状态,原因是应用程序已完成该请求。 
UpdateRequestCache 发出信号表示代码处理已完成,并且已准备好将文件添加到 ASP.NET 缓存。 
EndRequest 发出信号表示对请求的所有处理都已完成。这是在应用程序终止时调用的最后一个事件。 另外,还有三个对每个请求都发生的事件,它们可以以不确定的顺序激发。它们显示在下表中。事件 说明 
PreSendRequestHeaders 发出信号表示 HTTP 标头将要被发送到客户端。这提供了在发送标头之前添加、移除或修改它们的机会。 
PreSendRequestContent 发出信号表示内容将要被发送到客户端。这提供了在发送内容前修改它的机会。 
Error 

解决方案 »

  1.   

    you cannot change the sequence of event handlers being called, put what you want to call in a separate function, then call it in Application_BeginRequest
      

  2.   

    啊?
    但是如果Session_OnStart没有执行,
    Session能用么?
    不能吧。。
    该不是这样吧:beginrequest
    {
        try{
            if(session("start"))callBeginRequest
        }catch(x){//will session("start") throw a exception...?
            callBeginRequest
        }
    }
    session_onstart
    {
        do..session..start
        if(!session("start"))
        {
            session("start")=true;
            callBeginRequest
        }
    }