zoukankan      html  css  js  c++  java
  • ASP.NET MVC中的Global.asax文件

    1.global.asax文件概述 

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

    2.一个请求的完整处理过程

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

    3.global.asax中的事件

    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(object sender, EventArgs e)
     12         {
     13             //不是每次请求都调用
     14             //在应用程序关闭时运行的代码,在最后一个HttpApplication销毁之后执行
     15             //比如IIS重启,文件更新,进程回收导致应用程序转换到另一个应用程序域
     16         }
     17 
     18         void Session_Start(object sender, EventArgs e)
     19         {
     20             //不是每次请求都调用
     21             //会话开始时执行
     22         }
     23 
     24         void Session_End(object sender, EventArgs e)
     25         {
     26             //不是每次请求都调用
     27             //会话结束或过期时执行
     28             //不管在代码中显式的清空Session或者Session超时自动过期,此方法都将被调用
     29         }
     30 
     31         void Application_Init(object sender, EventArgs e)
     32         {
     33             //不是每次请求都调用
     34             //在每一个HttpApplication实例初始化的时候执行
     35         }
     36 
     37         void Application_Disposed(object sender, EventArgs e)
     38         {
     39             //不是每次请求都调用
     40             //在应用程序被关闭一段时间之后,在.net垃圾回收器准备回收它占用的内存的时候被调用。
     41             //在每一个HttpApplication实例被销毁之前执行
     42         }
     43 
     44         void Application_Error(object sender, EventArgs e)
     45         {
     46             //不是每次请求都调用
     47             //所有没有处理的错误都会导致这个方法的执行
     48         }
     49 
     50 
     51         /*********************************************************************/
     52         //每次请求都会按照顺序执行以下事件
     53         /*********************************************************************/
     54 
     55         void Application_BeginRequest(object sender, EventArgs e)
     56         {
     57             //每次请求时第一个出发的事件,这个方法第一个执行
     58         }
     59 
     60         void Application_AuthenticateRequest(object sender, EventArgs e)
     61         {
     62             //在执行验证前发生,这是创建验证逻辑的起点
     63         }
     64 
     65         void Application_AuthorizeRequest(object sender, EventArgs e)
     66         {
     67             //当安全模块已经验证了当前用户的授权时执行
     68         }
     69 
     70         void Application_ResolveRequestCache(object sender, EventArgs e)
     71         {
     72             //当ASP.NET完成授权事件以使缓存模块从缓存中为请求提供服务时发生,从而跳过处理程序(页面或者是WebService)的执行。
     73             //这样做可以改善网站的性能,这个事件还可以用来判断正文是不是从Cache中得到的。
     74         }
     75 
     76         //------------------------------------------------------------------------
     77         //在这个时候,请求将被转交给合适程序。例如:web窗体将被编译并完成实例化
     78         //------------------------------------------------------------------------
     79 
     80         void Application_AcquireRequestState(object sender, EventArgs e)
     81         {
     82             //读取了Session所需的特定信息并且在把这些信息填充到Session之前执行
     83         }
     84 
     85         void Application_PreRequestHandlerExecute(object sender, EventArgs e)
     86         {
     87             //在合适的处理程序执行请求前调用
     88             //这个时候,Session就可以用了
     89         }
     90 
     91         //-------------------------------------------------
     92         //在这个时候,页面代码将会被执行,页面呈现为HTML
     93         //-------------------------------------------------
     94 
     95         void Application_PostRequestHandlerExecute(object sender, EventArgs e)
     96         {
     97             //当处理程序完成对请求的处理后被调用。
     98         }
     99 
    100         void Application_ReleaseRequestState(object sender, EventArgs e)
    101         {
    102             //释放请求状态
    103         }
    104 
    105         void Application_UpdateRequestCache(object sender, EventArgs e)
    106         {
    107             //为了后续的请求,更新响应缓存时被调用
    108         }
    109 
    110         void Application_EndRequest(object sender, EventArgs e)
    111         {
    112             //EndRequest是在响应Request时最后一个触发的事件
    113             //但在对象被释放或者从新建立以前,适合在这个时候清理代码
    114         }
    115 
    116         void Application_PreSendRequestHeaders(object sender, EventArgs e)
    117         {
    118             //向客户端发送Http标头之前被调用
    119         }
    120 
    121         void Application_PreSendRequestContent(object sender, EventArgs e)
    122         {
    123             //向客户端发送Http正文之前被调用
    124         }
    125     }
  • 相关阅读:
    【阅读】读书只是生活方式的一种
    【Android崩溃记录】持续更新(bugly)
    【iOS】判断字符串是否是url及从字符串中提取url
    【React Native】正则判断字符串中是否包含url、提取字符串中的url
    【Objective-C】自定义UITextView(placeholder,长按换行,文字位置、文字间距等)
    【Swift】监听耳机插入拔出的通知
    INS(Instagram)如何绑定谷歌二次验证码/谷歌身份验证/双重认证?
    脸书(Facebook)如何绑定谷歌二次验证码/谷歌身份验证/双重认证?
    推特(Twitter)如何绑定谷歌二次验证码/谷歌身份验证/双重认证?
    TeamViewer如何绑定谷歌二次验证码/谷歌身份验证?
  • 原文地址:https://www.cnblogs.com/caoyc/p/5891420.html
Copyright © 2011-2022 走看看