マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

HttpApplication(Global.asax)HttpModuleHttpHandler等について。

https://docs.microsoft.com/ja-jp/aspnet/core/migration/http-modules/_static/moduleshandlers.png
引用:ttps://docs.microsoft.com/ja-jp/aspnet/core/migration/http-modules/_static/moduleshandlers.png

HttpApplication?(Global.asax)

  • 共通の処理を定義する。
    • メソッド
    • プロパティ
    • イベント
  • Global.asax ファイルで定義する。

HttpModule?

要求を傍受、参加、または変更できる。

  • HttpHandlerの実行前と実行後に呼び出される。
  • インターフェイス IHttpModule? を実装する。

HttpHandler?

ISAPI拡張機能に類似した機能。

  • 個々のエンドポイント要求を処理するために使用する。
  • 要求を処理するために使用されるハンドラーは 1 つのみ。
  • インターフェイス IHttpHandler? を実装する。
  • アプリ内の HTTP URL または URL 拡張機能のグループを処理できる。

詳細

ライフサイクル

HttpApplication(Global.asax)HttpModule

  • 同時実行数に合わせてインスタンス化される。
  • リクエスト-レスポンス間は専有する(メンバはスレッドセーフ)。
  • インスタンス化されたオブジェクトは複数ユーザ間で使いまわされる。
  • HttpApplication?
    • アプリケーションレベルのイベント
    • リクエストレベルのイベント
  • HttpModule?
    • リクエストレベルのイベント

HttpHandler

  • リクエストの都度、IHttpHandlerFactory?によって、HttpHandlerをインスタンス化される。
  • <httpHandlers>の定義に従って、拡張子やGET,POSTなどに応じて適切なHttpHandlerがインスタンス化される。

イベント発生順序

★は初回のみ。

全体の初期処理

  • Global.Application_Start ★
  • IHTTPModule
    • Constructor ★
    • IHTTPModule.Init ★

リクエストの開始処理

  • BeginRequest?
    • Global.BeginRequest?
    • IHTTPModule.BeginRequest?
    • Global.Application_BeginRequest?
  • Global.DefaultAuthentication?
  • AuthenticateRequest?
    • Global.AuthenticateRequest?
    • IHTTPModule.AuthenticateRequest?
    • Global.Application_AuthenticateRequest?
  • PostAuthenticateRequest?
    • Global.PostAuthenticateRequest?
    • IHTTPModule.PostAuthenticateRequest?
  • AuthorizeRequest?
    • Global.AuthorizeRequest?
    • IHTTPModule.AuthorizeRequest?
  • PostAuthorizeRequest?
    • Global.PostAuthorizeRequest?
    • IHTTPModule.PostAuthorizeRequest?
  • ResolveRequestCache?
    • Global.ResolveRequestCache?
    • IHTTPModule.ResolveRequestCache?
  • PostResolveRequestCache?
    • Global.PostResolveRequestCache?
    • IHTTPModule.PostResolveRequestCache?
  • Page.Constructor
  • PostMapRequestHandler?
    • Global.PostMapRequestHandler?
    • IHTTPModule.PostMapRequestHandler?
  • Global.Session_Start ★
  • AcquireRequestState?
    • Global.AcquireRequestState?
    • IHTTPModule.AcquireRequestState?
  • PostAcquireRequestState?
    • Global.PostAcquireRequestState?
    • IHTTPModule.PostAcquireRequestState?
  • PreRequestHandlerExecute?
    • Global.PreRequestHandlerExecute?
    • IHTTPModule.PreRequestHandlerExecute?

ページの開始処理

  • Page.PreInit?
  • MasterPage?.Constructor
  • Init
    • MasterPage?.ContentPlaceHolder?
    • MasterPage?
    • Page
  • Page
    • InitComplete?
    • PreLoad?
  • Load
    • Page
    • MasterPage?
    • MasterPage?.ContentPlaceHolder?
  • Page
    • Page.LoadComplete?

ページの終了処理

  • PreRender?
    • Page
    • MasterPage?
    • MasterPage?.ContentPlaceHolder?
  • Page
    • PreRenderComplete?
    • SaveStateComplete?
  • Unload
    • MasterPage?.ContentPlaceHolder?
    • MasterPage?
    • Page

リクエストの終了処理

  • PostRequestHandlerExecute?
    • Global.PostRequestHandlerExecute?
    • IHTTPModule.PostRequestHandlerExecute?
  • ReleaseRequestState?
    • Global.ReleaseRequestState?
    • IHTTPModule.ReleaseRequestState?
  • PostReleaseRequestState?
    • Global.PostReleaseRequestState?
    • IHTTPModule.PostReleaseRequestState?
  • UpdateRequestCache?
    • Global.UpdateRequestCache?
    • IHTTPModule.UpdateRequestCache?
  • PostUpdateRequestCache?
    • Global.PostUpdateRequestCache?
    • IHTTPModule.PostUpdateRequestCache?
  • EndRequest?
    • Global.EndRequest?
    • IHTTPModule.EndRequest?
  • PreSendRequestHeaders?
    • Global.PreSendRequestHeaders?
    • IHTTPModule.PreSendRequestHeaders?
  • PreSendRequestContent?
    • Global.PreSendRequestContent?
    • IHTTPModule.PreSendRequestContent?

全体の終了処理

  • Global.Session_End ★
  • IHTTPModule.Dispose ★
  • Global.Application_End ★

主要なイベントの説明

#イベント説明
1BeginRequest?リクエストを受信して最初に発生
2AuthenticateRequest?ASP.NETがユーザの認証処理の準備が完了したときに発生
3PostAuthenticateRequest?Post
4AuthorizeRequest?権限の承認処理の準備が完了したときに発生
5PostAuthorizeRequest?Post
6ResolveRequestCache?リクエストに対してキャッシュからレスポンスを生成するのかレスポンスを1から生成するのかを決定する
7PostResolveRequestCache?Post
8PostMapRequestHandler?現在の要求を適切なイベント ハンドラにマップすると発生
9AcquireRequestState?セッション変数の準備処理
10PostAcquireRequestState?Post
11PreRequestHandlerExecute?各ハンドラ実行直前に発生
12PostRequestHandlerExecute?各ハンドラ実行直後に発生
13ReleaserequestState?セッション変数などの値を更新・保存する
14PostReleaseRequestState?Post
15UpdateRequestCache?リクエストキャッシュの更新処理を行う
16PostUpdateRequestCache?Post
17EndRequest?クライアントのブラウザへデータを送信する直前に発生
18PreSendRequestHeaders?HTTP ヘッダーをクライアントに送信する直前に発生
19PreSendRequestContent?コンテンツをクライアントに送信する直前に発生

リライト

  • リライト ≒ URLの書き換えはHttpHandlerでも可能のようだが、
  • その他の書き換え処理は、要求パイプラインに
    モジュールを「プラグイン」できるHttpModuleを使うことが多い模様。

URL(Request)

URLの書き換えは、

行う。

ResponseBody?

ResponseBody?の書き換えは、HttpModuleでResponse.Filterにデコレートされた
ResponseStream?を設定することで行う(HttpApplicationHttpModule)。

ResponseHeader?

ResponseHeader?の書き換えは、
要求パイプライン中のPreSendRequestHeaders?ハンドラで行う(HttpApplicationHttpModule)。

参考

microsoft.com

support

docs

違い

HttpModule?HttpHandler?

HttpApplication?HttpModule?

その他

ライフサイクル

イベント発生順序

リライト


Tags: :.NET開発, :ASP.NET


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-10-12 (火) 09:48:54 (6d)