HttpModuleチュートリアル

4956 ワード

HttpModuleチュートリアル


asp.NetでダウンロードしたcommunityStarterKitは、長い間ページがどのようにジャンプを実現しているのか分からないことを研究していましたが、そのハイパーリンクは見つかりませんでした.最後にブレークポイント追跡を行い、やっとCommunitiesModuleクラスを見つけ、IHttpModuleから継承されていることを発見し、プロジェクトでCommunitiesModuleを検索し、ついにwebconfigを発見した.xmlにはそしてヘルプを見て、インターネットで検索して、やっと分かりました...ASP.NetにおけるカスタムHttp処理およびアプリケーションのHttpModule編著者:孫亜民HttpHandlerはISAPI Extentionのような機能を実現し、要求(Request)の情報と送信応答(Response)を処理する.HttpHandler機能の実装は、IHttpHandlerインターフェースを実装することによって達成される.一方、HttpModuleはISAPI Filterのような機能を実現している.
HttpModuleの実装
HttpModulesはISAPI Filterのような機能を実現しており、開発には通常以下のステップが必要である:1.IhttpModuleインタフェース2を実装クラスを作成する.Initメソッドを実装、必要なメソッド3を登録する.登録を実現する方法4.Disposeメソッドを実装するには、クラスのパージを手動で行う必要がある場合は、Disposeメソッドの実装を追加できますが、これは必須ではありません.通常、Disposeメソッドにコードを追加しなくてもいいです.5.Web.configファイルでは、作成したクラスを登録する以下に、HttpModulesの例を示します.この例では、HttpApplicationのBeginRequestとEndRequestイベントを簡単に登録し、これらのイベントの実装方法で関連情報を印刷します.

        
          
           
          1:

            using System;

            using System.Web;

            namespace MyModule

            {

            public class MyModule : IHttpModule

            {

            public void Init(HttpApplication application)

            {

            application.BeginRequest += (new

            EventHandler(this.Application_BeginRequest));

            application.EndRequest += (new

            EventHandler(this.Application_EndRequest));

            }

            private void Application_BeginRequest(Object source, EventArgs e)

            {

            HttpApplication Application = (HttpApplication)source;

            HttpResponse Response=Application.Context.Response;

            Response.Write("<h1>Beginning of Request</h1><hr>");

            }

            private void Application_EndRequest(Object source, EventArgs e)

            {

            HttpApplication application = (HttpApplication)source;

            HttpResponse Response=Application.Context.Response;

            Response.Write("<h1>End of Request</h1><hr>");

            }

            public void Dispose()

            {

            }

            }

            }
        
          

プログラムの開始は、次の名前空間を参照します.

        
          
           
         using System;

            using System.Web;
        
          

HttpApplication、HttpContext、HttpResponseなどがSystemにあるためである.Webで定義されているので、System.Webネームスペースは参照する必要があります.MyModuleクラスはIhttpModuleインタフェースを実現した.Initメソッドでは、BeginRequestおよびEndRequestイベントを実装する方法が示されている.この2つの方法では,単純にそれぞれいくつかの情報を印刷しただけである.以下、Web.configファイルにこのクラスを登録すると、このHttpModuleを使用できます.登録の方法は以下の通りです.

        
          
           
         <configuration>

            <system.web>

            <httpModules>

            <add name=" MyModule " type=" MyModule, MyModule" />

            </httpModules>

            </system.web>

            </configuration>
        
          

今、効果を見てみましょう.Aspxページを作成します.aspx、内容は以下の通りです.

        
          
           
         <%

            Response.Write("<h1>This is the Page</h1><hr>");

            %>
        
          

実行後のインタフェースを図に示します.
HttpModuleを深く研究する
HttpModuleは、HttpApplicationオブジェクトの一連のイベントの処理によって、HttpModuleのInitメソッドに登録されたHTTP処理パイプに影響を与える.

        
          
           
         BeginRequest

            AuthenticateRequest

            AuthorizeRequest

            ResolveRequestCache

            AcquireRequestState

            PreRequestHandlerExecute

            PostRequestHandlerExecute

            ReleaseRequestState

            UpdateRequestCache

            EndRequest
        
          

一部のイベントはGlobal.asaxのイベントに対応し、対応関係は以下の通りです.
HttpModule
Global.asax
BeginRequest
Application_BeginRequest
AuthenticateRequest
Application_AuthenticateRequest
EndRequest
Application_EndRequest
例1では,BeginRequestとEndRequestイベントが処理されており,他のイベントの処理方式は基本的に類似している.HttpHandlerに対応してみると,これらのイベントは,HttpHandlerの前に発生するものもあれば,HttpHandlerの処理が完了した後に発生するものもある.サーバ側のオブジェクトが異なる期間に異なる表現を持つため、イベントの発生順序を知ることが重要です.例の1つはセッションの使用です.すべてのイベントでSessionを処理できるわけではありませんが、限られたいくつかのイベントでしか処理できません.詳細な手順は、以下のHTTP Request処理ライフサイクルチャートを参照してください.
HttpModuleによるアクセス権システムの実装
我々がアプリケーションシステムを開発する際,アプリケーションシステムの権限制御は非常に重要な部分である.ASPでは、制御権限が必要なASPページごとに権限制御コードを追加し、お客様のページへのアクセスを制御する必要があるため、権限の制御を実現するのは面倒です.このような問題は、重複世代を大量に作成する以外にありません./span>