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

在Global.asax.cs文件中

protected void Application_BeginRequest(Object sender, EventArgs e)
{
   Application["StartTime"] = System.DateTime.Now;
}

再在webform1中的page_load事件中添加
private void Page_Load(object sender, System.EventArgs e)
{
   System.DateTime startTime = (System.DateTime)Application["StartTime"];
   System.DateTime endTime = System.DateTime.Now;
   System.TimeSpan ts = endTime - startTime;
   Response.Write("页面执行时间:"+ ts.Milliseconds +" 毫秒");
}

如果是05版本中,就要手动添加了,自己在App_Code中添加Global.asax.cs,然后设置Global.asax的属性Inherits="Global"或CodeBehind="Global.asax.cs"即可<%@ Application Language="C#" Codebehind="Global.asax.cs" %>

以上测试在03/05均通过.

以下转对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文件的创建

点击Web站点>>添加新建项>>全局应用 程序类,即可添加Global.asax文件。在.Net2003里,直接右击Global.asax文件查看代码就可以编辑 Global.asax.cs文件,但是在.Net2005中,没有这个选项,因此需要自己在App_Code中添加Global.asax.cs,然后 设置Global.asax的属性Inherits="Global"或CodeBehind="Global.asax.cs"即可。不可知道还有没有 其他更好的方法。

3 Global.asax文件的执行

例如,IIS现在接到一个访问ASP.NET应用程序的请求,这时候IIS会将这 个请求映射给aspnet_isapi.dll,当aspnet_isapi.dll接到这个请求后,会新建一个aspnet_wp.exe的进程 (windows server 2003下是w3wp.exe进程),这个进程会将请求传递给一个被指定的AppDomain,当这个AppDomain被创建时,就会去加载一些配置文 件中的信息(加载顺序是从machine.config文件到web.config文件中的一些相关配置),而当这些信息都被加载以 后,AppDomain会去获得一个HttpApplication的实例,这个时候global类就会被编译加载了,接下来AppDomain会做一些 相关的处理创建Page类的实例,最后这个页面呈现到客户端浏览器上。但这里有一点问题需要注意,当配置文件被加载的时候,并不是表示AppDomain 会加载配置文件中所有的信息,而仅是加载一些需要的信息。而有些配置信息是在需要时,才会被AppDomain加载。例如我们在web.config文件 中配置了很多HttpModule,但是仅当每一个HttpModule被访问到时,AppDomain才会去加载并处理这些信息。所以说 web.config文件和global没有先后执行的顺序,只是视具体的信息什么时候会被加载和处理。

4 Global.asax.cs中的方法的含义

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.AuthorizeRequest4.ResolveRequestCache 5.AcquireRequestState6.PreRequestHandlerExecute 7.PostRequestHandlerExecute8.ReleaseRequestState 9.UpdateRequestCache 10.EndRequest

转载自:http://www.cnblogs.com/top5/archive/2009/10/16/1584337.html

Global.asax详解的更多相关文章

  1. ASP.NET Global.asax详解

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

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

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

  3. Global.asax 详解

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

  4. ASP.NET MVC5基础 - Global.asax详解

    简介 作用 Global.asax的处理事件 实例说明 总结 简介 Global.asax是一个文本文件,它提供全局可用代码.这些代码包括应用程序的事件处理程序以及会话事件.方法和静态变量.有时该文件 ...

  5. asp.net mvc global.asax文件详解

    一.文件概述 global.asax这个文件包含全局应用程序事件的事件处理程序.它响应应用程序级别和会话级别事件的代码. 运行时, Global.asax 将被编译成一个动态生成的 .NET Fram ...

  6. MVC过滤器详解

    MVC过滤器详解   APS.NET MVC中(以下简称"MVC")的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理. ...

  7. OutputCache属性详解(三)— VaryByHeader,VaryByCustom

    目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...

  8. log4net详解(转载)

    1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是介绍如何在Visual S ...

  9. Log4Net使用详解

    1.Log4Net环境的搭建与基本配置 (1)Log4Net框架介绍     Log4net 是 Apache 下一个开放源码的项目,它是Log4j 的一个克隆版.我们可以控制日志信息的输出目的地.L ...

随机推荐

  1. httprunner上传文件multipart/form-data

    Content-Type = multipart/form-data#上传文件 Rquest Payload ------WebKitFormBoundarymAyGmnyhpf3UBdec    C ...

  2. sql server中使用xp_cmdshell

    关键词:sql server开启高级配置,使用Bat,cmdshell 1.sql server中使用xp_cmdshell --允许配置高级选项 GO RECONFIGURE GO . --开启xp ...

  3. 发现一个小技巧:火狐浏览器对phpmyadmin支持更友好

    这段时间ytkah正在迁移服务器(A→B),为了方便起见,直接用phpmyadmin导入数据库.一般我们是用navicat来操作数据库的,但是服务器A设置了权限,无法用navicat连接,只好在浏览器 ...

  4. Android Volley全然解析(四),带你从源代码的角度理解Volley

    版权声明:本文出自郭霖的博客,转载必须注明出处. https://blog.csdn.net/sinyu890807/article/details/17656437 转载请注明出处:http://b ...

  5. flatpickr功能强大的日期时间选择器插件

    flatpickr日期时间选择器支持移动手机,提供多种内置的主题效果,并且提供对中文的支持.它的特点还有: 使用SVG作为界面的图标. 兼容jQuery. 支持对各种日期格式的解析. 轻量级,高性能, ...

  6. python学习笔记(二十三)私有方法和私有属性

    在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑. 但是,从前面Person类的定义来看,外部代码还是可以自由地修改一个实例的nam ...

  7. 安装CentOS 7 文字版

    下载镜像 http://mirrors.163.com/ CentOS 7.4 http://mirrors.163.com/centos/7.4.1708/isos/x86_64/ 选择 CentO ...

  8. ruby中的可调用对象--方法

    上一篇讲了ruby中的可调用对象proc和lambda,他们都是块转换成的对象.ruby中的可调用对象还有方法.通过使用method方法,并且以方法名作为参数(字符串或者符号),就可以得到一个方法对象 ...

  9. 初探Nginx服务器的整体架构

    高度模块化的设计是 Nginx 的架构基础.Nginx 服务器被分解为多个模块,每个模块就是一个功能模块,只负责自身的功能,模块之间严格遵循“高内聚,低耦合”的原则. 核心模块 核心模块是 Nginx ...

  10. Java 对比Hashtable、Hashmap、Treemap有什么不同?

    ①基本理解 Hashtable.Hashmap.Treemap都是最常见的一些Map实现,是以键值对的形式存储和操作数据的容器类型. Hashtable是Java类库提供的一个哈希实现,本身是同步的, ...