Global.asax
是 ASP.NET 應用程序中的全局應用程序文件,負責管理應用程序級別的事件處理。這個文件也被稱為應用程序事件處理程序文件,允許開發者針對應用程序的生命周期事件(例如啟動、會話開始等)執行代碼。
以下是一些常見的 Global.asax
事件及其作用的簡單介紹:
常見的事件:
Application_Start:
- 當應用程序第一次啟動時觸發。
- 可以在這裡執行全局初始化代碼,例如設置路由、註冊依賴項等。
- 典型應用:捆綁和壓縮、全局緩存初始化、依賴注入的配置。
protected void Application_Start(object sender, EventArgs e)
{
// 初始化操作
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
Session_Start:
- 每當一個新的用戶會話開始時觸發。
- 可以在這裡進行會話級別的初始化,如設置初始狀態、計數器等。
protected void Session_Start(object sender, EventArgs e)
{
// 初始化每個用戶的會話
Session["UserStartTime"] = DateTime.Now;
}
Application_BeginRequest:
- 當應用程序接收到每個請求時觸發。
- 這裡的代碼可以用來處理每個 HTTP 請求,例如 URL 重寫、請求日誌記錄等。
protected void Application_BeginRequest(object sender, EventArgs e)
{
// 請求開始時執行的邏輯
}
Application_Error:
- 當應用程序中發生未處理的錯誤時觸發。
- 可以用於全局錯誤處理,將錯誤記錄到日誌或重定向到錯誤頁面。
protected void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
// 錯誤處理代碼(如記錄到日誌)
Server.ClearError();
}
Session_End:
- 當一個用戶的會話結束時觸發。
- 可以在這裡處理會話結束後的操作,例如清理會話數據、記錄用戶離線時間等。
- 注意:只有在狀態模式為 InProc(即會話狀態存儲在內存中)時,該事件才會觸發。
protected void Session_End(object sender, EventArgs e)
{
// 用戶會話結束時執行的邏輯
}
Application_End:
- 當應用程序停止時觸發,通常是應用程序重啟或應用池回收的情況。
- 可以在這裡執行一些資源清理的操作,比如釋放佔用的內存、關閉數據庫連接等。
protected void Application_End(object sender, EventArgs e)
{
// 應用程序結束時執行的邏輯
}
Global.asax
文件的典型用途:
- 應用程序範圍的設置和初始化:如路由配置、捆綁和壓縮資源、依賴注入的初始化等。
- 全局錯誤處理:通過
Application_Error
捕獲未處理的異常,記錄到日誌或重定向到錯誤頁面。 - 統計和計數:通過
Session_Start
和Session_End
來跟踪在線用戶數量或其他會話級別的信息。 - 請求攔截和處理:通過
Application_BeginRequest
在每個請求開始時執行自定義邏輯,如 URL 重寫或自定義身份驗證。
Global.asax
文件的事件處理程序是應用程序生命周期中的核心部分,允許開發者對應用程序的整體行為進行精細的控制。