Global.asax
Global.asaxはASP.NETでアプリケーション・セッションレベルのイベントに応答するコードを記述するための特別なファイルです。
[1]たとえば、Webアプリケーションのアプリケーションの開始と終了、認証の要求、セッションの開始と終了などのタイミングで実行するコードはこのファイルに記述します。
作成方法
Visual STudio 2017で、ASP.NET Webアプリケーションを作成している場合、プロジェクトに[追加] - [新しい項目]で、新しい項目として、[Web] - [グローバル アプリケーション クラス]を追加するとプロジェクトにGlobal.asaxファイルが追加されます。
イベント
利用可能なイベントは次の通りです。この一覧は大分古い2001年の記事「ASP.NET と Web フォームの紹介」[2]から抜粋しています。
最もよく使われるのはApplication_Start、Application_Errorではないかと思います。
global.asaxのイベント
イベント名 | 説明 | Application_Start | 最初のユーザーが Web サイトを訪れたときに発生する。 |
Application_End | サイトのセッションの最後のユーザーがタイムアウトを起こしたときに発生する。 |
Application_Error | アプリケーション内で処理されないエラーが発生したときに発生する。 |
Session_Start | 新しいユーザーが Web サイトを訪れたときに発生する。 |
Session_End | ユーザーのセッションがタイムアウトを起こすか終了したときに発生する。 |
Application_AuthorizeRequest | ユーザー認証後、権限を割り当てる際に発生します。 |
Application_AcquireRequestState | ASP.NET が、現在の要求に関連付けられた現在の状態 (セッション状態など) を取得したときに発生する。 |
Application_AuthenticateRequest | セキュリティ モジュールがユーザーのアイデンティティを確立したときに発生する。 |
Application_AuthorizeRequest | セキュリティ モジュールがユーザー承認を確認したときに発生する。 |
Application_BeginRequest | ASP.NET が要求の処理を開始したときに、要求関連の他のイベントよりも前に発生する。 |
Application_Disposed | ASP.NET が、要求への応答の際に、実行のチェーンを完了したときに発生する。 |
Application_EndRequest | 要求の処理中に、要求関連の他のイベントの後に、最後のイベントとして発生する。 |
Application_PostRequestHandlerExecute | ASP.NET ハンドラ (ページ、XML Web サービス) が実行を終了した直後に発生する。 |
Application_PreRequestHandlerExecute | ASP.NET が、ページや XML Web サービスなどのハンドラを実行する直前に発生する。 |
Application_PreSendRequestContent | ASP.NET がクライアントにコンテンツを送信する直前に発生する。 |
Application_PreSendRequestHeaders | ASP.NET がクライアントに HTTP ヘッダーを送信する直前に発生する。 |
Application_ReleaseRequestState | ASP.NET がすべての要求ハンドラの実行を終了した後に発生する。このイベントを受けて、状態モジュールは現在の状態データを保存する。 |
Application_ResolveRequestCache | ASP.NET が、承認イベントを完了した後に発生する。これを受けて、キャッシング モジュールは、ハンドラ (ページ、Web サービスなど) の実行をバイパスし、要求への応答にキャッシュを使用するようになる。 |
Application_UpdateRequestCache | ASP.NET がハンドラの実行を終了した後に発生する。これを受けて、キャッシング モジュールは、それ以降のキャッシュからの応答に使用される応答を格納する。 |
仕組み
Global.asaxに記述したプログラムは実行時にはHttpApplicationクラスを継承したクラスとしてコンパイルされます。
Global.asaxのイベントの大部分はHttpApplicationクラスが発生させますが、Application_Startなど一部のイベントは、HttpApplicationFactoryクラスやSessionStateModuleクラスが発生させます。
イベントとハンドルするメソッドとの結びつけは名前のみで識別されるようです。(明言してあるドキュメントは見つけられませんでした。) XxxxイベントのことをOnXxxxと書いても認識されます。たとえば、次のコードはどちらもApplication_Startイベントをハンドルできます。
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
End Sub
■リスト1:VB版 Global.asaxでApplication_Startをハンドルする例1Sub Application_OnStart(ByVal sender As Object, ByVal e As EventArgs)
End Sub
■リスト2:VB版 Global.asaxでApplication_Startをハンドルする例2protected void Application_Start(object sender, EventArgs e)
{
}
■リスト3:C#版 Global.asaxでApplication_Startをハンドルする例1protected void Application_OnStart(object sender, EventArgs e)
{
}
■リスト4:C#版 Global.asaxでApplication_Startをハンドルする例2出典
- ^ Global.asax 構文
- ^ ASP.NET と Web フォームの紹介