asp.net mvc global.asax文件详解

一、文件概述

  global.asax这个文件包含全局应用程序事件的事件处理程序。它响应应用程序级别和会话级别事件的代码。  
运行时, Global.asax 将被编译成一个动态生成的 .NET Framework 类,该类是从HttpApplication基类派生的。 
因此在global.asax中的代码可以访问HttpApplication类中所有的public或者protected的成员
global.asax不被用户直接请求,但global.asax中的代码会被自动执行来响应特定的应用程序事件。
global.asax是可选的,而且在一个web项目中是唯一的,它应该处于网站的根目录。

二、一个请求的完整过程

以下过程由Internet Information Service(inetinfo.exe)(IIS)执行 
1.客户端发出请求
2.验证请求
3.给请求授权
4.确定请求的缓存 
5.获取缓存状态
6.在请求的处理程序执行前
7.http处理程序执行请求 (asp.net页面由aspnet_wp.exe执行)
8.在请求的处理程序执行后
9.释放请求状态
10.更新请求缓存
11.请求结束

三、Global.asax.cs中的事件

public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            //不是每次请求都调用
            //在Web应用程序的生命周期里就执行一次
            //在应用程序第一次启动和应用程序域创建事被调用
            //适合处理应用程序范围的初始化代码
        }

        void Application_End(object sender, EventArgs e)
        {
            //不是每次请求都调用
            //在应用程序关闭时运行的代码,在最后一个HttpApplication销毁之后执行
            //比如IIS重启,文件更新,进程回收导致应用程序转换到另一个应用程序域
        }

        void Session_Start(object sender, EventArgs e)
        {
            //不是每次请求都调用
            //会话开始时执行
        }

        void Session_End(object sender, EventArgs e)
        {
            //不是每次请求都调用
            //会话结束或过期时执行
            //不管在代码中显式的清空Session或者Session超时自动过期,此方法都将被调用
        }

        void Application_Init(object sender, EventArgs e)
        {
            //不是每次请求都调用
            //在每一个HttpApplication实例初始化的时候执行
        }

        void Application_Disposed(object sender, EventArgs e)
        {
            //不是每次请求都调用
            //在应用程序被关闭一段时间之后,在.net垃圾回收器准备回收它占用的内存的时候被调用。
            //在每一个HttpApplication实例被销毁之前执行
        }

        void Application_Error(object sender, EventArgs e)
        {
            //不是每次请求都调用
            //所有没有处理的错误都会导致这个方法的执行
        }

        /*********************************************************************/
        //每次请求都会按照顺序执行以下事件
        /*********************************************************************/

        void Application_BeginRequest(object sender, EventArgs e)
        {
            //每次请求时第一个出发的事件,这个方法第一个执行
        }

        void Application_AuthenticateRequest(object sender, EventArgs e)
        {
            //在执行验证前发生,这是创建验证逻辑的起点
        }

        void Application_AuthorizeRequest(object sender, EventArgs e)
        {
            //当安全模块已经验证了当前用户的授权时执行
        }

        void Application_ResolveRequestCache(object sender, EventArgs e)
        {
            //当ASP.NET完成授权事件以使缓存模块从缓存中为请求提供服务时发生,从而跳过处理程序(页面或者是WebService)的执行。
            //这样做可以改善网站的性能,这个事件还可以用来判断正文是不是从Cache中得到的。
        }

        //------------------------------------------------------------------------
        //在这个时候,请求将被转交给合适程序。例如:web窗体将被编译并完成实例化
        //------------------------------------------------------------------------

        void Application_AcquireRequestState(object sender, EventArgs e)
        {
            //读取了Session所需的特定信息并且在把这些信息填充到Session之前执行
        }

        void Application_PreRequestHandlerExecute(object sender, EventArgs e)
        {
            //在合适的处理程序执行请求前调用
            //这个时候,Session就可以用了
        }

        //-------------------------------------------------
        //在这个时候,页面代码将会被执行,页面呈现为HTML
        //-------------------------------------------------

        void Application_PostRequestHandlerExecute(object sender, EventArgs e)
        {
            //当处理程序完成对请求的处理后被调用。
        }

        void Application_ReleaseRequestState(object sender, EventArgs e)
        {
            //释放请求状态
        }

        void Application_UpdateRequestCache(object sender, EventArgs e)
        {
            //为了后续的请求,更新响应缓存时被调用
        }

        void Application_EndRequest(object sender, EventArgs e)
        {
            //EndRequest是在响应Request时最后一个触发的事件
            //但在对象被释放或者从新建立以前,适合在这个时候清理代码
        }

        void Application_PreSendRequestHeaders(object sender, EventArgs e)
        {
            //向客户端发送Http标头之前被调用
        }

        void Application_PreSendRequestContent(object sender, EventArgs e)
        {
            //向客户端发送Http正文之前被调用
        }
    }

  

原文地址:https://www.cnblogs.com/minrh/p/9707684.html

时间: 2024-08-07 02:57:45

asp.net mvc global.asax文件详解的相关文章

ASP.NET MVC Global.asax文件中的事件

1 public class MvcApplication : System.Web.HttpApplication 2 { 3 protected void Application_Start(object sender, EventArgs e) 4 { 5 //不是每次请求都调用 6 //在Web应用程序的生命周期里就执行一次 7 //在应用程序第一次启动和应用程序域创建事被调用 8 //适合处理应用程序范围的初始化代码 9 } 10 11 void Application_End(obj

ASP.NET中Global.asax 文件是什么

Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一些任务.下面让我们详细看一下如何在应用程序开发工作中使用这个文件. 概述 Global.asax 位于应用程序根目录下.虽然 Visual Studio .NET 会自动插入这个文件到所有的 ASP.NET 项目中,但是它实际上是一个可选文件.删除它不会出问题——当然是在你没有使用它的情况下..asax 文件扩展名指出它是

ASP.NET中Global.asax 文件是什么?

Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一些任务.下面让我们详细看一下如何在应用程序开发工作中使用这个文件. 概述 Global.asax 位于应用程序根目录下.虽然 Visual Studio .NET 会自动插入这个文件到所有的 ASP.NET 项目中,但是它实际上是一个可选文件.删除它不会出问题——当然是在你没有使用它的情况下..asax 文件扩展名指出它是

Attribute(二)——自定义特性+Asp.net MVC中的filter详解

上篇博客是关于特性中有关预定义特性的一些基础,同时也是对Attribute这一概念的一个宏观上的认识,在上篇博客结尾介绍了有关为自定义特性服务的AttributeUsage,这篇博客主要是通过filter的使用间接的了解自定义特性的具体应用. 一.filter简介 在了解自定义特性前,先引入一个概念filter,它是MVC中自带的一种功能,在我们项目中通常会遇到在Action执行前或结束时,去执行日志记录或错误处理等功能,通常可使用AOP截取来实现,但是在MVC中提供了filter过滤,大大方便

ASP.NET MVC Controller激活系统详解2

一.引言 此篇博文紧接上篇博文进行阐述,本篇博文阐述的主题是Controller激活和url路由 二.总述 ASP.NET路由系统是HTTP请求抵达服务端的第一道屏障,它根据注册的路由规则对拦截的请求进行匹配并解析包含目标的Controller和Action名称的路由信息.当前ControllerBuilder具有用于激活Controller对象的ControllerFactory. ASP.NET路由系统的核心是一个叫做UrlRoutingModule的自定义HttpModule,路由的实现是

ASP.NET MVC中的Global.asax文件

1.global.asax文件概述 global.asax这个文件包含全局应用程序事件的事件处理程序.它响应应用程序级别和会话级别事件的代码. 运行时, Global.asax 将被编译成一个动态生成的 .NET Framework 类,该类是从HttpApplication基类派生的. 因此在global.asax中的代码可以访问HttpApplication类中所有的public或者protected的成员global.asax不被用户直接请求,但global.asax中的代码会被自动执行来

asp.net webconfig文件详解

asp.net webconfig文件详解 一.认识Web.config文件 Web.config 文件是一个xml文本文件,它用来储存 asp.NET Web 应用程序的配置信息(如最常用的设置asp.NET Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中.当你通过.NET新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置.如果你想修改子目录的配置设置,你可以在该子目录下新建一个We

【MVC框架】——Global.asax文件中的RegisterGlobalFilters()和RegisterRoutes()方法

最近在学习MVC框架时,发现新建MVC的项目,会自动创建一个Global.asax文件,它跟我们平时所看到的文件的文件后缀名不一样,而且在这个文件中也有好多方法.现在介绍一下其中的两个方法,RegisterGlobalFilters()和RegisterRoutes()方法. 什么是Global.asax文件 Global.asax文件是ASP.NET应用程序文件,提供了一中在一个中心位置响应应用程序级别和模块级别时间的方法,它位于应用程序根目录下,每个应用程序根目录下只能有一个该文件.虽然创建

Global.asax文件—ASP.NET细枝末节(1)

说明 Global的解释是全局的.全球的. Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一些任务. Global.asax使用频率不是特别高,属于细枝末节的小知识点.不说了,来我们一起研究一下这个东西吧. 创建和预览 1.添加 同web.config一样,通常情况下Global.asax文件名是固定的.如果您没有非得要改名的理由,不建议您修改. 你改了,系统不懂了.(