Global.asax 是 ASP.NET 應用程式的選用檔案,集中處理應用程式層級與模組層級事件(啟動、結束、錯誤、請求管線等)。本文詳細列出所有事件、觸發時機與典型用法。
.asax 區別於 .aspx。| 事件 | 觸發時機 | 典型用途 |
|---|---|---|
| Application_Init | 應用程式實例化/首次呼叫 | 初始化共用資源(每個 HttpApplication 實例皆執行) |
| Application_Start | 第一個 HttpApplication 建立時 | 建立單例物件、快取預載、啟動背景工作 |
| Application_BeginRequest | 收到請求(管線第一個事件) | URL 重寫、記錄請求資訊、啟動計時器 |
| Application_AuthenticateRequest | 安全模組建立使用者身分後 | 自訂驗證邏輯、載入使用者權限 |
| Application_AuthorizeRequest | 授權檢查通過後 | 細粒度授權控制 |
| Application_ResolveRequestCache | 授權完成後 | 輸出快取攔截、自訂快取邏輯 |
| Application_AcquireRequestState | 取得 Session 狀態後 | 載入自訂狀態提供者 |
| Application_PreRequestHandlerExecute | 執行 Handler (頁面/Web Service) 前 | 效能計數、前置處理 |
| Application_PostRequestHandlerExecute | Handler 執行結束後 | 後置處理、壓縮回應 |
| Application_ReleaseRequestState | 所有 Handler 執行完畢 | 儲存 Session 狀態 |
| Application_UpdateRequestCache | Handler 執行完畢 | 寫入輸出快取 |
| Application_EndRequest | 請求結束(管線最後事件) | 記錄回應時間、清理請求資源 |
| Application_Error | 未處理例外發生時 | 全域錯誤記錄、友善錯誤頁面導向 |
| Application_Disposed | 應用程式銷毀前 | 釋放非託管資源、關閉連線池 |
| Application_End | 最後一個 HttpApplication 銷毀 | 應用程式關閉清理(僅執行一次) |
| Session_Start | 新使用者造訪 | 初始化 Session 變數、線上人數計數 |
| Session_End | Session 逾時/結束 | 清理使用者資源、記錄離線 |
void Application_BeginRequest(Object sender, EventArgs e)
{
Context.Items["ReqStart"] = DateTime.Now;
}
void Application_EndRequest(Object sender, EventArgs e)
{
if (Context.Items["ReqStart"] != null)
{
TimeSpan elapsed = DateTime.Now - (DateTime)Context.Items["ReqStart"];
LogRequest(Context.Request.Url, elapsed.TotalMilliseconds);
}
}
Application_Start 僅執行一次,適合昂貴初始化;Application_Init 每個 HttpApplication 實例皆執行。Session_End 僅在 InProc 模式生效;StateServer/SQLServer 模式不觸發。