.net Global.asax文件详解

1 Global.asax文件的作用 

先看看MSDN的解释,Global.asax 文件(也称为 ASP.NET 应用程序文件)是一个可选的文件,该文件包含响应 ASP.NET 或HTTP模块所引发的应用程序级别和会话级别事件的代码。Global.asax 文件驻留在 ASP.NET 应用程序的根目录中。运行时,分析 Global.asax 并将其编译到一个动态生成的 .NET Framework 类,该类是从HttpApplication基类派生的。配置 ASP.NET,以便自动拒绝对 Global.asax 文件的任何直接的 URL 请求;外部用户不能下载或查看其中的代码。Global.asax 文件是可选的。只在希望处理应用程序事件或会话事件时,才应创建它. 

2 Global.asax文件的创建 

右键项目>>添加新建项>>全局应用程序类,即可添加Global.asax文件。

3 Global.asax文件的执行 

当应用程序运行的时候,global.asax的内容被编译到一个继承自HttpApplication类的类中。因此,HttpApplication类中所有的方法、类和对象对于应用程序都是可用的。

CLR 监控着global.asax的变化。如果它察觉到这个文件发生了改变,那么将自动启动一个新的应用程序复本,同时创建一个新的应用程序域。原应用程序域当前正在处理的请求被允许结束,而任何新的请求都交由新应用程序域来处理。当原应用程序域的最后一个请求处理完成时,这个应用程序域即被清除。这有效的保证了应用程序可以重新启动,而不被任何用户察觉。

为防止应用程序用户下载应用程序而看到源代码,ASP.NET缺省配置为阻止用户查看global.asax的内容。如果在浏览器输入以下URL:

http://localhost/Global.asax

这将会收到一个403(禁止访问)错误信息或者类似的信息如:

This type of page is not served。


4 Global.asax文件的事件

应用程序中的Application对象和 Session对象能够公开事件。这些事件能被global.asax文件或指定的文件中的事件处理程序处理。例如,当应用程序开始执行时,触发 Application_Start事件;当应用程序结束时,触发Application_End事件。Application的某些事件是每当页面请求时触发,而其他一些事件,例如Application_Error,则仅在特定情况下触发。

        protected void Application_Start(object sender, EventArgs e)
        {
            Application["count"] = 0;
            Application.Add("count", 0);
        }

        protected void Session_Start(object sender, EventArgs e)
        {
            Application.Lock();
            Application["count"] = (int)Application["count"] + 1;
            Application.UnLock();
        }


5.Global.asax中的方法的含义 

Application_Init:在每一个HttpApplication实例初始化的时候执行 
Application_Disposed:在每一个HttpApplication实例被销毁之前执行 
Application_Error:所有没有处理的错误都会导致这个方法的执行 
Application_Start:在程序初始化的时候执行。在Web应用程序的生命周期里就执行一次,这里只能放一些公用的信息,比如HttpApplicationState。 
Application_End:应用程序结束时,在最后一个HttpApplication销毁之后执行。对应Application_Start,在整个生命周期里面也是只执行一次。 
Session_Start:会话开始时执行。 
Session_End:会话结束或过期时执行。 
Application_BeginRequest:BeginRequest是在收到Request时第一个触发的事件,这个方法第一个执行。 
Application_AuthenticateRequest:当安全模块已经建立了当前用户的标识后执行。 
Application_AuthorizeRequest:当安全模块已经验证了当前用户的授权时执行。 
Application_ResolveRequestCache:当ASP.NET完成授权事件以使缓存模块从缓存中为请求提供服务时发生,从而跳过处理程序(页面或者是WebService)的执行。这样做可以改善网站的性能,这个事件还可以用来判断正文是不是从Cache中得到的。 
Application_AcquireRequestState:当ASP.NET获取当前请求所关联的当前状态(如Session)时执行。 
Application_PreRequestHandlerExecute:当ASP.Net即将把请求发送到处理程序对象(页面或者是WebService)之前执行。这个时候,Session就可以用了。 
Application_PostRequestHandlerExecute:当处理程序对象工作完成后执行。 
Application_ReleaseRequestState:在ASP.NET执行完所有请求处理程序后执行。ReleaseRequestState事件将使当前状态数据被保存。 
Application_UpdateRequestCache:在ASP.NET执行完处理程序后为了后续的请求而更新响应缓存时执行。 
Application_EndRequest:同上,EndRequest是在响应Request时最后一个触发的事件,这个方法自然就是最后一个执行的了。 
Application_PreSendRequestHeaders:向客户端发送Http标头之前执行。 

Application_PreSendRequestContent:向客户端发送Http正文之前执行。 


Request相应的事件执行顺序: 
1.BeginRequest
2.AuthenticateRequest
3.AuthorizeRequest
4.ResolveRequestCache
5.AcquireRequestState
6.PreRequestHandlerExecute
7.PostRequestHandlerExecute
8.ReleaseRequestState
9.UpdateRequestCache
10.EndRequest 

猜你喜欢

转载自blog.csdn.net/q290994/article/details/80042887