简介

Global.asax是一个文本文件,它提供全局可用代码。这些代码包括应用程序的事件处理程序以及会话事件、方法和静态变量。有时该文件也被称为应用程序文件。

Global.asax 文件继承自 HttpApplication 类,Global.asax 文件中的任何代码都是它所在的应用程序的一部分。每个应用程序在其根目录下只能有一个Global.asax文件。不过这个文件是可选的,如果删除掉Global.asax文件,应用程序将对所有事件应用由 HttpApplication类提供的默认行为,不会出现问题。

作用

Global.asax文件主要用来处理更高级别的应用程序事件,如Application_Start、Application_End、Session_Start、Session_End等。

Global.asax文件中的事件,几乎涵盖了应用程序运行的任何节点。你可以在应用程序启动、应用程序遇到异常、用户会话超时等节点添加处理事件。

Global.asax的处理事件

Global.asax 文件包含以下事件:

函数名

说明

Application_Init

在应用程序被实例化或第一次被调用时,该事件被触发。对于所有的HttpApplication 对象实例,它都会被调用。

Application_Disposed

在应用程序被销毁之前触发。这是清除以前所用资源的理想位置。

Application_Error

当应用程序中遇到一个未处理的异常时,该事件被触发。

Application_Start

在HttpApplication 类的第一个实例被创建时,该事件被触发。它允许你创建可以由所有HttpApplication 实例访问的对象。

Application_End

在HttpApplication 类的最后一个实例被销毁时,该事件被触发。在一个应用程序的生命周期内它只被触发一次。

Application_BeginRequest

在接收到一个应用程序请求时触发。对于一个请求来说,它是第一个被触发的事件,请求一般是用户输入的一个页面请求(URL)。

Application_EndRequest

针对应用程序请求的最后一个事件。

Application_PreRequestHandlerExecute

在 ASP.NET 页面框架开始执行诸如页面或 Web 服务之类的事件处理程序之前,该事件被触发。

Application_PostRequestHandlerExecute

在 ASP.NET 页面框架结束执行一个事件处理程序时,该事件被触发。

Applcation_PreSendRequestHeaders

在 ASP.NET 页面框架发送 HTTP 头给请求客户(浏览器)时,该事件被触发。

Application_PreSendContent

在 ASP.NET 页面框架发送内容给请求客户(浏览器)时,该事件被触发。

Application_AcquireRequestState

在 ASP.NET 页面框架得到与当前请求相关的当前状态(Session 状态)时,该事件被触发。

Application_ReleaseRequestState

在 ASP.NET 页面框架执行完所有的事件处理程序时,该事件被触发。这将导致所有的状态模块保存它们当前的状态数据。

Application_ResolveRequestCache

在 ASP.NET 页面框架完成一个授权请求时,该事件被触发。它允许缓存模块从缓存中为请求提供服务,从而绕过事件处理程序的执行。

Application_UpdateRequestCache

在 ASP.NET 页面框架完成事件处理程序的执行时,该事件被触发,从而使缓存模块存储响应数据,以供响应后续的请求时使用。

Application_AuthenticateRequest

在安全模块建立起当前用户的有效的身份时,该事件被触发。在这个时候,用户的凭据将会被验证。

Application_AuthorizeRequest

当安全模块确认一个用户可以访问资源之后,该事件被触发。

Session_Start

在一个新用户访问应用程序 Web 站点时,该事件被触发。

Session_End

在一个用户的会话超时、结束或他们离开应用程序 Web 站点时,该事件被触发。

实例说明

我们以Application_Error(程序遇到未处理的异常时触发)事件做一个实例说明。我们现在GLobal.asax文件中注册Application_Error事件,如下:

 protected void Application_Error(object sender, EventArgs e)
{
//获取前一个触发到的异常信息
Exception ex = Server.GetLastError().GetBaseException();
//将前一个异常信息清除。不清除会触发错误详情页(黄页)。
Server.ClearError();
//将错误信息返回到客户端
Response.Write("Error:" + ex.Message);
}

当应用程序触发未处理的异常时,会触发该事件。我们在事件中会给前台返回一个错误消息。

然后我们在上篇文章创建的MVC测试项目中,添加一个Action方法。

我们请求这个Action,显示如下界面:


需要注意的是,我们在Application_Error事件中,必须将捕获到的Error清除掉,也就是这行代码:Server.ClearError();。否则将会引发ASP.Net的详细错误页面(俗称黄页)。

总结

本文我们了解到了Global.asax文件的作用以及包含的处理事件,我们根据Application_Error实例能大概了解到事件的使用方法。在实际项目中,我们可以使用Global.asax统一管理应用程序中注册、登录、异常等等事件,这样可以使我们的应用程序更加规范,更加易于管理。

更多内容可访问我的博客:http://www.yunc.top/

ASP.NET MVC5基础 - Global.asax详解的更多相关文章

  1. ASP.NET MVC5基础-控制器(Controller)详解

    在上文ASP.NET MVC5基础 – MVC文件架构中我们简单了解了下控制器Controller的作用,本文我将详细介绍控制器Controller的使用方法. Controller的运行过程 上文我 ...

  2. ASP.NET MVC5基础-过滤器(Filters)详解

    什么是过滤器? 过滤器的类型与作用 定义过滤器 授权过滤器 动作过滤器 结果过滤器 异常处理过滤器 过滤器的使用方法 总结 什么是过滤器? 通过上一篇关于Controller控制器的文章我们知道,MV ...

  3. ASP.NET Global.asax详解

    最近在研究bbsmax的代码,但是一直不知道入口在哪里,然后就对各个文件分析了,然后终于在对global.asax文件查看的时候看到Application_BeginRequest才明白入口,所以现在 ...

  4. ASP.NET Global.asax详解【转】

    global.asax是一个文本文件,它提供全局可用代码.这些代码包括应用程序的事件处理程序以及会话事件.方法和静态变量.有时该文件也被称为应用程序文件. global.asax 文件中的任何代码都是 ...

  5. Global.asax 详解

    在网上找了N多相关的东西总说的不够细,现在终于找到了.可以了解web.cofig和Global.asax之间的关系以及执行的顺序. 在Global.asax.cs文件中 protected void ...

  6. Global.asax详解

    在网上找了N多相关的东西总说的不够细,现在终于找到了.可以了解web.cofig和Global.asax之间的关系以及执行的顺序. 在Global.asax.cs文件中 protected void ...

  7. ASP.NET MVC5基础 – MVC文件架构

    创建MVC项目 首先,我们使用Visual Studio2019创建一个MVC架构的应用程序.步骤如下:首先打开VS2019,在启动页选择[创建新项目].然后选择创建 ASP.NET Web 应用程序 ...

  8. Asp.net中web.config配置文件详解(一)

    本文摘自Asp.net中web.config配置文件详解 web.config是一个XML文件,用来储存Asp.NET Web应用程序的配置信息,包括数据库连接字符.身份安全验证等,可以出现在Asp. ...

  9. (转)总结之:CentOS 6.5 MySQL数据库的基础以及深入详解

    总结之:CentOS 6.5 MySQL数据库的基础以及深入详解 原文:http://tanxw.blog.51cto.com/4309543/1395539 前言 早期MySQL AB公司在2009 ...

随机推荐

  1. Flask容器化部署原理与实现

    本文将介绍Flask的部署方案:Flask + Nginx + uWSGI,并使用docker进行容器化部署,部署的实例来源 Flask开发初探,操作系统为ubuntu. Flask系列文章: Fla ...

  2. 性能达到原生 MySQL 七倍,华为云 Taurus 技术解读【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  3. 这可能是最容易入门的socket教程了

    前言: 如今,网络编程已然成为了一个后端开发工程师需要具备的核心技能之一.因此,该博客力求提供最简单.通俗的描述方式,来描绘网络编程中常见的知识点,同时附带代码示例,后期会加上具体的抓包分析,实际项目 ...

  4. IOS UIAlertView(警告框)方法总结

    转自:my.oschina.net/u/2340880/blog/408873?p=1 IOS中UIAlertView(警告框)常用方法总结 一.初始化方法 - (instancetype)initW ...

  5. [TimLinux] Python 类型与运算

    1. 内建(built-in)数据类型种类 数字类型:int(), float() 顺序(sequence): 字符串:str() 元祖:tuple() 列表:list() 字典:dict() 集合: ...

  6. CoderForces-Round60D(1117) Magic Gems

    D. Magic Gems time limit per test 3 seconds memory limit per test 256 megabytes input standard input ...

  7. 最全的防火墙(firewalld)

    第1章  防火墙的介绍 1.1  防火墙的介绍 1.1.1 概念 动态管理防火墙服务(图形界面和linux界面都可以实现) 支持不同防火墙的区域信息 属于传输层次的防火墙 1.1.2 防火墙的默认规则 ...

  8. 从FPGA搞定OV7670 VGA显示 移植到 STM32F10x TFT显示 总结及疑问(高手请进)

    OV7670不愧是最便宜的摄像头了最大显示像素:640*480(在VGA显示器上显示效果还不赖,用usb模块采集显示依然显著) 第一步:VGA显示 视频图像(实时)FPGA+SDRAM+OV7670= ...

  9. Python3 面向对象进阶2

    目录 Classmethod Staticmethod Isinstance Issubclass 反射 概念 hasattr getattr setattr delattr 魔法方法 概念 __ne ...

  10. CSS让高度百分百的方案

    一般用来上下所有居中,但是这时候auto的计算是全屏像素,从而得到满屏 position: fixed; left: 0px; right: 0px; top: 0px; bottom: 0px; m ...