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     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM