title: ASP.NET MVC 的Global.asax文件
date: 2019-03-01 00:00:00
categories:

  • 后端
    tags:
  • ASP.NET

文件

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using System.Web.Optimization;
  7. using System.Web.Routing;
  8. /*
  9. * 该文件是网站全局配置文件,包含“全局应用程序事件”的“事件处理程序”。它相应“应用程序级别”和“会话级别事件”的代码。
  10. * 运行时Global.asax文件将会被编译成为一个动态生成的.NET Framework类,该类是从HttpApplication基类派生的,
  11. * 因此在Global.asax中的代码可以访问HttpApplication类中的所有Public或者Protected的成员,
  12. * global.asax不被用户直接请求,但global.asax中的代码会被自动执行来响应特定的应用程序事件。
  13. * global.asax是可选的,而且在一个web项目中是唯一的,它应该处于网站的根目录。
  14. */
  15. namespace MVC
  16. {
  17. public class MvcApplication : System.Web.HttpApplication
  18. {
  19. /*其中的所有事件可以被分为两类:一种是满足特定的事件时才会被触发,另一种是每次请求都会被按照顺序执行*/
  20. protected void Application_Start()
  21. {
  22. AreaRegistration.RegisterAllAreas();
  23. FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  24. RouteConfig.RegisterRoutes(RouteTable.Routes);/*定义路由配置*/
  25. BundleConfig.RegisterBundles(BundleTable.Bundles);
  26. //不是每次请求都调用
  27. //在Web应用程序的生命周期里就执行一次
  28. //在应用程序第一次启动和应用程序域创建事被调用
  29. //适合处理应用程序范围的初始化代码
  30. }
  31. void Application_End(object sender, EventArgs e)
  32. {
  33. //不是每次请求都调用
  34. //在应用程序关闭时运行的代码,在最后一个HttpApplication销毁之后执行
  35. //比如IIS重启,文件更新,进程回收导致应用程序转换到另一个应用程序域
  36. }
  37. void Session_Start(object sender, EventArgs e)
  38. {
  39. //不是每次请求都调用
  40. //会话开始时执行
  41. }
  42. void Session_End(object sender, EventArgs e)
  43. {
  44. //不是每次请求都调用
  45. //会话结束或过期时执行
  46. //不管在代码中显式的清空Session或者Session超时自动过期,此方法都将被调用
  47. }
  48. void Application_Init(object sender, EventArgs e)
  49. {
  50. //不是每次请求都调用
  51. //在每一个HttpApplication实例初始化的时候执行
  52. }
  53. void Application_Disposed(object sender, EventArgs e)
  54. {
  55. //不是每次请求都调用
  56. //在应用程序被关闭一段时间之后,在.net垃圾回收器准备回收它占用的内存的时候被调用。
  57. //在每一个HttpApplication实例被销毁之前执行
  58. }
  59. void Application_Error(object sender, EventArgs e)
  60. {
  61. //不是每次请求都调用
  62. //所有没有处理的错误都会导致这个方法的执行
  63. }
  64. /*********************************************************************/
  65. //每次请求都会按照顺序执行以下事件
  66. /*********************************************************************/
  67. void Application_BeginRequest(object sender, EventArgs e)
  68. {
  69. //每次请求时第一个出发的事件,这个方法第一个执行
  70. }
  71. void Application_AuthenticateRequest(object sender, EventArgs e)
  72. {
  73. //在执行验证前发生,这是创建验证逻辑的起点
  74. }
  75. void Application_AuthorizeRequest(object sender, EventArgs e)
  76. {
  77. //当安全模块已经验证了当前用户的授权时执行
  78. }
  79. void Application_ResolveRequestCache(object sender, EventArgs e)
  80. {
  81. //当ASP.NET完成授权事件以使缓存模块从缓存中为请求提供服务时发生,从而跳过处理程序(页面或者是WebService)的执行。
  82. //这样做可以改善网站的性能,这个事件还可以用来判断正文是不是从Cache中得到的。
  83. }
  84. //------------------------------------------------------------------------
  85. //在这个时候,请求将被转交给合适程序。例如:web窗体将被编译并完成实例化
  86. //------------------------------------------------------------------------
  87. void Application_AcquireRequestState(object sender, EventArgs e)
  88. {
  89. //读取了Session所需的特定信息并且在把这些信息填充到Session之前执行
  90. }
  91. void Application_PreRequestHandlerExecute(object sender, EventArgs e)
  92. {
  93. //在合适的处理程序执行请求前调用
  94. //这个时候,Session就可以用了
  95. }
  96. //-------------------------------------------------
  97. //在这个时候,页面代码将会被执行,页面呈现为HTML
  98. //-------------------------------------------------
  99. void Application_PostRequestHandlerExecute(object sender, EventArgs e)
  100. {
  101. //当处理程序完成对请求的处理后被调用。
  102. }
  103. void Application_ReleaseRequestState(object sender, EventArgs e)
  104. {
  105. //释放请求状态
  106. }
  107. void Application_UpdateRequestCache(object sender, EventArgs e)
  108. {
  109. //为了后续的请求,更新响应缓存时被调用
  110. }
  111. void Application_EndRequest(object sender, EventArgs e)
  112. {
  113. //EndRequest是在响应Request时最后一个触发的事件
  114. //但在对象被释放或者从新建立以前,适合在这个时候清理代码
  115. }
  116. void Application_PreSendRequestHeaders(object sender, EventArgs e)
  117. {
  118. //向客户端发送Http标头之前被调用
  119. }
  120. void Application_PreSendRequestContent(object sender, EventArgs e)
  121. {
  122. //向客户端发送Http正文之前被调用
  123. }
  124. }
  125. }

执行顺序

以下过程由Internet Information Service(inetinfo.exe)(IIS)执行

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

文章引用自博客园-积少成多