IHttpModuleのwebconfigへの登録

9693 ワード

asp.Netでは、aspによる取得を解決するための2つの方法が提供する.Netサーバが作成・維持するHttpApplicationオブジェクトは、HttpApplicationオブジェクトのイベント処理を容易に登録できます.この2つの方法はIHtpModuleとglobalである.asax方式.この2つの方式の同じ点のコアはいずれもIHttpModuleインタフェースである.

IHttpModuleインタフェースからHttpApplicationを作成するイベントハンドラ


このインタフェースは名前空間Systemにある.Webでは、HttpApplicationオブジェクトを定義するためのイベント処理を専用に使用します.
このインタフェースを実現するクラスは、asp.Netでは、このインタフェースの定義は以下の通りです.
#region Assembly System.Web.dll, v4.0.0.0
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Web.dll
#endregion

using System;

namespace System.Web
{
    // Summary:
    //     Provides module initialization and disposal events to the implementing class.
    public interface IHttpModule
    {
        // Summary:
        //     Disposes of the resources (other than memory) used by the module that implements
        //     System.Web.IHttpModule.
        void Dispose();
        //
        // Summary:
        //     Initializes a module and prepares it to handle requests.
        //
        // Parameters:
        //   context:
        //     An System.Web.HttpApplication that provides access to the methods, properties,
        //     and events common to all application objects within an ASP.NET application
        void Init(HttpApplication context);
    }
}

Disposeメソッドは、Moduleで使用されている管理されていないリソースを回収するために使用されます.
Initメソッド、このメソッドは、asp.Netでは、HttpApplicationオブジェクトインスタンスを作成するたびに、登録されているHttpModuleタイプを巡回し、反射することによって、登録されている各HttpModuleタイプのインスタンスオブジェクトを順次作成し、このHttpApplicationインスタンスをInitメソッドによって各HttpModuleに渡すことで、HttpModuleは、HttpApplicationのイベント登録を最初の時間に完了することができる.
    public class MyHttpModule : IHttpModule
    {
        public void Dispose()
        {
            throw new NotImplementedException();
        }

        public void Init(HttpApplication context)
        {
            context.PostAuthenticateRequest += context_PostAuthenticateRequest;
        }

        void context_PostAuthenticateRequest(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }
    }

asp.Netでは、インタフェースIHttpModuleインタフェースを実装するのは、HttpModuleを実装する最初のステップにすぎません.それを機能させるには、Webサイトのプロファイルに登録する必要があります.
プロファイルといえば、Netでは,ウェブサイトプロファイルの実行順序は,レベルともいえる.
はい.Netのシステムフォルダには、サーバに対する所有がある.Netプログラムのプロファイル、プロファイルが存在するフォルダはオペレーティングシステムの:C:WindowsMicrosoft.NET\Framework\v4.0.30319Configディレクトリの下で、もちろん違います.Netバージョンも対応が異なります.
このフォルダの下には、machineという重要なプロファイルが2つあります.configとweb.config.
machine.configプロファイルにはサーバのすべてが保存する.Netプログラムの基本構成パラメータ.web.configプロファイルには、このサーバのすべてのWebアプリケーションに対する基本構成パラメータが保存されます.私たちが開発したウェブサイトプロジェクトのwebです.configで行った構成は、このウェブサイトアプリケーション向けのプロファイルであり、ウェブサイトがパブリックプログラムで機能する構成パラメータは、この3つのプロファイルの統合から来ています.
asp.Netのウェブサイトのプロファイルweb.config中、system.Web構成要素のサブ要素httpModulesは、Webサイトで使用されるHttpModule:httpModulesのサブ要素addを構成するために使用され、新しいHttpModuleを追加するために使用されます.clearは、前に登録したすべてのHttpModuleを明らかにします.
add要素には、必須のプロパティnameとtypeが2つあります.
name:このHttpModuleのプログラム内の名前を表します.Webアプリケーションでは、この名前でこのHttpModuleオブジェクトの参照を見つけることができます.HttpApplicationのModulesプロパティは、このオブジェクトに関連付けられたすべてのHttpModuleオブジェクトを表し、このnameをインデックスとして、対応するHttpModuleオブジェクトを見つけることができます.
type:HttpModuleオブジェクトのタイプ名、asp.Netサイトでは、このタイプ名を使用して、反射によってHttpModuleオブジェクトを動的に作成できます.タイプの書き方は、反射で要求されるタイプ名の書き方です.このクラスがサイトに定義されている場合、ネーミングスペースを含むクラスのフルネームです.そうでなければ、フルネームの後ろにカンマを使ってひっくり返し、タイプが存在するプログラムセットの名前をつける必要があります.このプログラムセットの名前は含める必要はありません.dll拡張子.
たとえば、対応するプログラムセットの名前がUserModuleであるModuleクラスライブラリUserModuleがあります.dll、このプログラムセットにはオンラインユーザーを処理するOnlineUserModuleがあります.では、プロファイルに登録するのはそうです.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;

namespace UserModule
{
    public class OnlineUserModule:IHttpModule
    {
        public void Dispose()
        {
            throw new NotImplementedException();
        }

        public void Init(HttpApplication context)
        {
            throw new NotImplementedException();
        }
    }
}
    <httpModules>
      <add name="online" type="UserModule.OnlineUserModule"/>
    </httpModules>

IIS 7について.0は、プロファイルのsystemが必要である.WebServer構成ノードにHttpModuleを登録します.注意このときの構成要素の名前はmodulesです.iis 7.0では、MapRequestHandler、LogRequest、PostLogRequestイベントにハンドラを追加できます.iis 7のみです.0統合モードで実行する.NET framework3.これらのイベントをサポートするには、0以降のバージョンで実行されるアプリケーションを使用します.
  <system.webServer>
    <modules>
      <add name="online" type="UserModule.OnlineUserModule"/>
    </modules>
  </system.webServer>

拡張コードブロックはiis 7でもよい.0ストレージ領域(ApplicationHost.config)のmodules要素に登録を設定します.ApplicationHostでconfigファイルに登録されているモジュールは、IIS 7によって所有するため、グローバル範囲を有する.0ベアラのwebアプリケーション登録.同様にApplicationHost.configファイルのglobalModules要素で定義されているネイティブコードモジュールは、グローバル範囲もあります.Webアプリケーションがグローバルモジュールを必要としない場合は、無効にできます.