在网上找了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.AuthorizeRequest 4.ResolveRequestCache 5.AcquireRequestState6.PreRequestHandlerExecute 7.PostRequestHandlerExecute 8.ReleaseRequestState 9.UpdateRequestCache10.EndRequest

转载于:https://www.cnblogs.com/puzi0315/archive/2012/08/06/2624420.html

Global.asax详解相关推荐

  1. ASP.NET Global.asax详解

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

  2. python全局变量global线程安全_对python多线程与global变量详解

    今天早上起来写爬虫,基本框架已经搭好,添加多线程爬取功能时,发现出错: 比如在下载文件的url列表中加入200个url,开启50个线程.我的爬虫-竟然将50个url爬取并全部命名为0.html,也就是 ...

  3. python local global_Python 关键字global全局变量详解

    变量作用域 一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量. 全局变量所有作用域都可用,局部变量只能在本函数可用,变量的使用顺序是,局部变量 > 全局变量, 也就是说:优 ...

  4. global在python中啥意思_Python中global用法详解

    1. 文档说明 在python3.3.2的官方api帮助文档上看到, 如下一段话: The global statement is a declaration which holds for the ...

  5. Python 关键字global全局变量详解

    转自:https://www.pinlue.com/article/2021/05/2000/0011605731500.html 变量作用域 一般在函数体外定义的变量成为全局变量,在函数内部定义的变 ...

  6. PHP 全局变量global与$GLOBAL大详解

    总结: A:1全局变量相当于有3个变量,函数外部的变量,函数内部的变量,及$GLOBAL的超全局变量. ----$GLOBAL是全局唯一的,而$var在为全局变量的别名. B:无论函数内部外部,只要曾 ...

  7. java中的global类,Drools语法篇之Global全局变量详解

    此语法是用来定义全局变量的,被用于提供应用程序对象的规则,一般来说,global是用于提供数据或者服务使用的规则,特别是应用程序服务中使用规则的后果,并返回数据规则, 全局变量不插入到工作记忆,因此全 ...

  8. smb服务介绍及配置详解

    理论部分 samba服务简介 smb服务是微软的网络通讯协议,后来应用到了linux系统上.这款文件共享协议可以使得Linux与windows系统之间进行文件共享与打印功能,由于NFS可以完成linu ...

  9. 、简述global关键字的作用_详解static inline关键字

    详解static inline关键字 本文章为知乎用户 @徐yang哟 原创,禁止抄袭! 灵感来源 在查stm32的LL库部分函数的API时,有时会查到这种函数: __STATIC_INLINE vo ...

最新文章

  1. centos7x64搭建php,2# CentOS 6.7 x64 Apache/PHP/Mariadb环境搭建
  2. [导入]利用PIL生成水印图片或文字
  3. UI5应用如果出现白屏但是没有任何错误消息打印出来,应该如何处理
  4. V$LICENSE表结构
  5. 推荐一个非常好玩的falsh游戏
  6. 解决libstdc++.so.6: version `GLIBCXX_3.4.22' not found
  7. 下列软件包有未满足的依赖关系: cmake-qt-gui : 依赖: cmake (= 3.10.2-1ubuntu2) E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依
  8. JavaScript实现map
  9. mysql 递归查询子类_MySQL递归查询当前节点及子节点
  10. Firefox扩展开发初级教程——开发一个简单的扩展
  11. 从Spring为什么要用IoC的支点,我撬动了整个Spring的源码脉络!
  12. java窗口连接_JAVA简单的注册窗口(连接数据库)
  13. 网易发起“疾风”智造IoT联盟,深化“互联网+先进制造业”发展
  14. 【测绘程序设计】坐标反算神器V1.0(附C/C#/VB源程序)
  15. 中医针灸学综合练习题库【9】
  16. 浅谈Oracle RAC --集群管理软件GI
  17. word2010学习
  18. 【Unity】【PC】【错误上报】Bug上报插件 Trello Bug Tracker 使用介绍 (一):用户上报部分
  19. EditPlus设置保存时不生成bak文件
  20. WooCommerce Product Feed指南 – Google Shopping和Facebook[2022]

热门文章

  1. linux ssh权限漏洞,OpenSSH do_setup_env函数权限提升漏洞(CVE-2015-8325)
  2. 登录linux后台工具,linux后台进程管理工具-supervisor
  3. Linux/Unix中的重定向简单实例
  4. centos7.4.3 部署python-pcl亲测可用(采坑记)
  5. 文章3:车载LIDAR点云数据中杆状地物自动提取与分类
  6. 【lidar】基于YOLO的3D目标检测(激光雷达点云)课程设计
  7. OpenCV(十六)边缘检测2 -- Laplace(拉普拉斯)二阶微分算子
  8. 全国计算机建模三等奖,2009年全国数学建模真题(论文获国家 三等奖).doc
  9. 计算机专业英语2008影印版第四章翻译,计算机专业英语2008影印版选择题的翻译加答案(14页)-原创力文档...
  10. vs编译报错C1020: 意外的 #endif