2011年5月27日 星期五

Global.asax 的 Application 事件觸發順序


在 Global.asax 所定義的事件,依據 ASP.NET Application Events in Global.asax 分類,可以分為:每次頁面的請求都會觸發,與依據條件來觸發兩種。在上圖所表示的,則是每個被使用者要求的頁面都會觸發的事件順序。

舉例來說,如果在 Application_BeginRequest 事件寫一行 Response.Write("paladin"); 則這個網站的每個頁面開頭第一行都會秀出 paladin 這個字眼。

另外依據條件來觸發的事件,則是如下:
從 Visual Studio 2005 開始,預設已經在方案總管理看不到 Global.asax 這檔案了。但如果個人有這方面的需求,還是可以透過新增的方式把這檔案加入。當你打開這 Global.asax 檔案時,會發現他是屬於 Code Inline 的寫法,對於習慣 Code Behind 的人來說,會有一點點不同,詳細的比較可以參考保哥文章(關於 Code Behind 與 Code Inline 開發模式的使用時機與技巧)。假如你想在  Global.asax 撰寫 Application_BeginRequest 事件,則只要直接加入下面一段就可以:

void Application_BeginRequest(object sender, EventArgs e)
    {
        //撰寫自己的 BeginRequest 程式碼
        Response.Write("***************");
    }

Steven Cheng 曾在論壇中提過另外有關 Code Behind 的寫法。
1.在與 Global.asax 同一層的檔案結構,新增一個 globalcode.cs 檔案。並讓這個類別繼承 HttpApplication。

//globalcode.cs

public partial class globalcode : HttpApplication
{
  public globalcode()
  {

  }

  void Application_BeginRequest(object sender, EventArgs e)
  {

    HttpContext.Current.Response.Write("paladin is here..");
  }
}

2.將原先 Global.asax 裡的
<%@ Application Language="C#"  %>
修改成
<%@ Application Language="C#"  CodeFile="globalcode.cs" Inherits="globalcode" %>

如此,也可以讓 Global.asax 以 Code Behind 來撰寫了。

參考:
01:ASP.NET Application Events in Global.asax
02:如何:使用 Visual C# .NET 建立 ASP.NET HTTP 模組
03:Working with the ASP.NET Global.asax file
04:Application_BeginRequest does not seem to run
05:關於 Code Behind 與 Code Inline 開發模式的使用時機與技巧

沒有留言:

張貼留言