現在ログインしていません。
新規アカウント作成
ログイン

Global.asax

Global.asaxはASP.NETでアプリケーション・セッションレベルのイベントに応答するコードを記述するための特別なファイルです。[1]

たとえば、Webアプリケーションのアプリケーションの開始と終了、認証の要求、セッションの開始と終了などのタイミングで実行するコードはこのファイルに記述します。

作成方法

Visual STudio 2017で、ASP.NET Webアプリケーションを作成している場合、プロジェクトに[追加] - [新しい項目]で、新しい項目として、[Web] - [グローバル アプリケーション クラス]を追加するとプロジェクトにGlobal.asaxファイルが追加されます。

イベント

利用可能なイベントは次の通りです。この一覧は大分古い2001年の記事「ASP.NET と Web フォームの紹介」[2]から抜粋しています。

最もよく使われるのはApplication_StartApplication_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 ObjectByVal e As EventArgs)

End Sub
■リスト1:VB版 Global.asaxでApplication_Startをハンドルする例1

Sub Application_OnStart(ByVal sender As ObjectByVal e As EventArgs)

End Sub
■リスト2:VB版 Global.asaxでApplication_Startをハンドルする例2

protected void Application_Start(object sender, EventArgs e)
{

}
■リスト3:C#版 Global.asaxでApplication_Startをハンドルする例1

protected void Application_OnStart(object sender, EventArgs e)
{

}
■リスト4:C#版 Global.asaxでApplication_Startをハンドルする例2

出典

  1. ^ Global.asax 構文
  2. ^ ASP.NET と Web フォームの紹介