EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

什麼是 Global.asax?——ASP.NET WebForms 中的全局應用程序文件介紹

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 文件的典型用途:

  1. 應用程序範圍的設置和初始化:如路由配置、捆綁和壓縮資源、依賴注入的初始化等。
  2. 全局錯誤處理:通過 Application_Error 捕獲未處理的異常,記錄到日誌或重定向到錯誤頁面。
  3. 統計和計數:通過 Session_StartSession_End 來跟踪在線用戶數量或其他會話級別的信息。
  4. 請求攔截和處理:通過 Application_BeginRequest 在每個請求開始時執行自定義邏輯,如 URL 重寫或自定義身份驗證。

Global.asax 文件的事件處理程序是應用程序生命周期中的核心部分,允許開發者對應用程序的整體行為進行精細的控制。

This article was last edited at 2024-10-03 10:17:24

Today's comments have reached the limit. If you want to comment, please wait until tomorrow (UTC-Time).

There is 20h33m35s left until you can comment.