Global.asax ファイルは、ASP.NET アプリケーション ファイルとも呼ばれ、アプリケーション レベルまたはモジュール レベルのイベントに応答するための中心となる場所を提供します。このファイルを使用して、アプリケーションのセキュリティやその他のタスクを実装できます。
Global.asax ファイルは、(URL 経由の) 直接 HTTP リクエストが自動的に拒否されるように構成されているため、ユーザーはそのコンテンツをダウンロードしたり表示したりできません。 ASP.NET ページ フレームワークは、Global.asax ファイルに加えられた変更を自動的に認識します。 Global.asax が変更された後、ASP.NET ページ フレームワークはアプリケーションを再起動します。これには、すべてのブラウザー セッションの終了、すべての状態情報の削除、アプリケーション ドメインの再起動が含まれます。
Global.asax ファイルは、HttpApplication オブジェクトのプールを維持し、必要に応じてプール内のオブジェクトをアプリケーションに割り当てる HttpApplication クラスから継承します。 Global.asax ファイルには、次のイベントが含まれています。
· Application_Init: このイベントは、アプリケーションが初めてインスタンス化されるか呼び出されるときにトリガーされます。これは、すべての HttpApplication オブジェクト インスタンスに対して呼び出されます。
· Application_Disused: アプリケーションが破棄される前にトリガーされます。これは、以前に使用したリソースをクリアするのに理想的な場所です。
· Application_Error: このイベントは、アプリケーションで未処理の例外が発生したときにトリガーされます。
· Application_Start: このイベントは、HttpApplication クラスの最初のインスタンスが作成されるときにトリガーされます。これにより、すべての HttpApplication インスタンスからアクセスできるオブジェクトを作成できます。
· Application_End: このイベントは、HttpApplication クラスの最後のインスタンスが破棄されるとトリガーされます。これは、アプリケーションの存続期間中に 1 回だけトリガーされます。
· Application_BeginRequest: アプリケーション要求が受信されるとトリガーされます。リクエストの場合、リクエストは通常、ユーザーが入力したページリクエスト (URL) によってトリガーされます。
· Application_EndRequest: アプリケーションによって要求された最後のイベント。
· Application_PreRequestHandlerExecute: このイベントは、ASP.NET ページ フレームワークがページや Web サービスなどのイベント ハンドラーの実行を開始する前にトリガーされます。
· Application_PostRequestHandlerExecute: このイベントは、ASP.NET ページ フレームワークがイベント ハンドラーの実行を終了するとトリガーされます。
· Applcation_PreSendRequestHeaders: このイベントは、ASP.NET ページ フレームワークが要求元のクライアント (ブラウザー) に HTTP ヘッダーを送信するとトリガーされます。
· Application_PreSendContent: このイベントは、ASP.NET ページ フレームワークが要求元のクライアント (ブラウザー) にコンテンツを送信するときにトリガーされます。
· Application_AcquireRequestState: このイベントは、ASP.NET ページ フレームワークが現在の要求に関連する現在の状態 (セッション状態) を取得するとトリガーされます。
· Application_ReleaseRequestState: このイベントは、ASP.NET ページ フレームワークがすべてのイベント ハンドラーの実行を完了したときにトリガーされます。これにより、すべての状態モジュールが現在の状態データを保存します。
· Application_ResolveRequestCache: このイベントは、ASP.NET ページ フレームワークが承認要求を完了するとトリガーされます。これにより、キャッシュ モジュールがキャッシュからのリクエストに対応できるようになり、イベント ハンドラーの実行がバイパスされます。
· Application_UpdateRequestCache: このイベントは、ASP.NET ページ フレームワークがイベント ハンドラーの実行を完了するとトリガーされ、キャッシュ モジュールが後続の要求への応答に使用する応答データを保存できるようになります。
· Application_AuthenticateRequest: このイベントは、セキュリティ モジュールが現在のユーザーの有効な ID を確立するとトリガーされます。このとき、ユーザーの資格情報が検証されます。
· Application_AuthorizeRequest: このイベントは、ユーザーがリソースにアクセスできることをセキュリティ モジュールが確認したときにトリガーされます。
· Session_Start: このイベントは、新しいユーザーがアプリケーション Web サイトにアクセスするとトリガーされます。
· Session_End: このイベントは、ユーザーのセッションがタイムアウトするか終了するか、アプリケーション Web サイトから離れるときにトリガーされます。
これらのイベントを使用する場合の重要な問題は、イベントが発生する順序を把握することです。 Application_Init イベントと Application_Start イベントは、アプリケーションの最初の起動時に 1 回発生します。同様に、Application_Disowned イベントと Application_End イベントは、アプリケーションの終了時に 1 回発生します。さらに、セッションベースのイベント (Session_Start および Session_End) は、ユーザーがサイトに出入りするときにのみ使用されます。
残りのイベント
は、
これら
のイベントが
トリガーされる順序を処理します。
・Application_PosTREQUESTHANDLEREXECUTE
・
Application_RELEASEREQUESTSTATE
・
Application_updateRequestCache
・
Application_EndRequest
これら
の
イベント
セキュリティ目的でよく使用されます。次の C# の例は、Application_Authenticate イベントを使用して Cookie によるフォームベースの認証を完了する、さまざまな Global.asax イベントを示しています。さらに、Application_Start イベントはアプリケーション変数を設定し、Session_Start はセッション変数を設定します。 Application_Error イベントは、発生したエラーを説明する簡単なメッセージを表示します。
protected void Application_Start(オブジェクト送信者, EventArgs e) {
アプリケーション["タイトル"] = "Builder.com サンプル";
}
protected void Session_Start(オブジェクト送信者, EventArgs e) {
セッション["開始値"] = 0;
}
protected void Application_AuthenticateRequest(オブジェクト送信者, EventArgs e) {
// フォーム認証 Cookie を抽出します
文字列クッキー名 = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Context.Request.Cookies[cookieName];
if(null == authCookie) {
// 認証 Cookie はありません。
戻る;
}
FormsAuthenticationTicket authTicket = null;
試す {
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
} catch(例外例) {
// 例外の詳細をログに記録します (わかりやすくするために省略)
戻る;
}
if (null == authTicket) {
// Cookie の復号化に失敗しました。
戻る;
}
// チケットの作成時に、UserData プロパティが割り当てられました
// パイプで区切られたロール名の文字列。
string[2] ロール
役割[0] = "1"
役割[1] = "2"
// Identity オブジェクトを作成します
FormsIdentity id = new FormsIdentity( authTicket );
// このプリンシパルはリクエスト全体に渡って流れます。
GenericPrincipal プリンシパル = 新しい GenericPrincipal(id, ロール);
// 新しいプリンシパル オブジェクトを現在の HttpContext オブジェクトにアタッチします
Context.User = プリンシパル;
}
protected void Application_Error(オブジェクト送信者, EventArgs e) {
Response.Write("エラーが発生しました。");
http://www.cnblogs.com/niit007/archive/2006/08/13/475565.html