方法 : HTTP ハンドラを登録する
更新 : 2007 年 11 月
カスタム HTTP ハンドラ クラスを作成した後、このハンドラ クラスを Web.config ファイルに登録する必要があります。これで、ASP.NET は HTTP ハンドラを呼び出して、指定されたファイル名拡張子を持つリソースに対する要求に対応できるようになります。
HTTP ハンドラを登録する方法は、アプリケーションをホストしているインターネット インフォメーション サービス (IIS: Internet Information Services) のバージョンによって異なります。IIS 6.0 の場合は、Web.config ファイルの httpHandlers セクションを使用してハンドラを登録します。クラシック モードで実行されている IIS 7.0 の場合は、httpHandlers セクションでハンドラを登録し、そのハンドラを Aspnet_isapi.dll ファイルに割り当てます。統合モードで実行されている IIS 7.0 の場合は、system.WebServer セクションの handlers 要素を使用してハンドラを登録します。
IIS 6.0 向けに HTTP ハンドラを登録するには
HTTP ハンドラ クラスをコンパイルし、作成されたアセンブリを、アプリケーションのルート フォルダの下にある Bin フォルダにコピーします。
または
ハンドラのソース コードをアプリケーションの App_Code フォルダに保存します。
HTTP ハンドラの例については、「チュートリアル : 同期 HTTP ハンドラの作成」を参照してください。
アプリケーションの Web.config ファイルに、httpHandlers セクションを作成します。
次の例では、SampleHandler.new リソースへの要求に応答する HTTP ハンドラを登録する方法を示します。ハンドラはアセンブリ SampleHandlerAssembly 内で SampleHandler クラスとして定義されます。
<configuration> <system.web> <httpHandlers> <add verb="*" path="SampleHandler.new" type="SampleHandler, SampleHandlerAssembly" /> </httpHandlers> <system.web> </configuration>
次の例では、ファイル名拡張子 ".SampleFileExtension" を持つファイルに対するすべての HTTP 要求が、SampleHandler2 クラスにマッピングされています。この場合、ハンドラ コードが App_Code フォルダにあるため、アセンブリを指定する必要はありません。
<configuration> <system.web> <httpHandlers> <add verb="*" path="*.SampleFileExtension" type="SampleHandler2 " /> </httpHandlers> <system.web> </configuration>
カスタムのファイル名拡張子に対する要求を ASP.NET に転送するように IIS を構成します。
詳細については、「方法 : IIS で HTTP ハンドラ拡張子を構成する」を参照してください。
クラシック モードで実行されている IIS 7.0 向けに HTTP ハンドラを登録するには
HTTP ハンドラ クラスをコンパイルし、作成されたアセンブリを、アプリケーションのルート フォルダの下にある Bin フォルダにコピーします。
または
ハンドラのソース コードをアプリケーションの App_Code フォルダに保存します。
HTTP ハンドラの例については、「チュートリアル : 同期 HTTP ハンドラの作成」を参照してください。
アプリケーションの Web.config ファイルに、httpHandlers セクションを作成します。
configuration 要素内に system.webServer セクションを作成します。
system.WebServer セクション内に handlers 要素を作成します。
メモ : httpHandlers 要素と handlers 要素の両方を定義する必要があります。
次の例では、SampleHandler.new リソースへの要求に応答する HTTP ハンドラを登録する方法を示します。ハンドラはアセンブリ SampleHandlerAssembly 内で SampleHandler クラスとして定義されます。
<configuration> <system.web> <httpHandlers> <add verb="*" path="SampleHandler.new" type="SampleHandler, SampleHandlerAssembly" /> </httpHandlers> <system.web> <system.webServer> <add name=SampleHandler" verb="*" path="SampleHandler.new" Modules="IsapiModule" scriptProcessor="FrameworkPath\aspnet_isapi.dll" resourceType="File" /> </system.webServer> </configuration>
FrameworkPath は、Aspnet_isapi.dll ファイルの正しいパスで置き換えます。
次の例では、ファイル名拡張子 ".SampleFileExtension" を持つファイルに対するすべての HTTP 要求が、SampleHandler2 クラスにマッピングされています。この場合、ハンドラ コードが App_Code フォルダにあるため、アセンブリを指定する必要はありません。
<configuration> <system.web> <httpHandlers> <add verb="*" path="*.SampleFileExtension" type="SampleHandler2" /> </httpHandlers> <system.web> <system.webServer> <add name=SampleHandler2" verb="*" path="*.SampleFileExtension" Modules="IsapiModule" scriptProcessor="FrameworkPath\aspnet_isapi.dll" resourceType="File" /> </system.webServer> </configuration>
FrameworkPath は、Aspnet_isapi.dll ファイルの正しいパスで置き換えます。
メモ : クラシック モードで実行されている IIS 7.0 については、IIS 6.0 の場合のように IIS マネージャを別途使用してファイル名拡張子を Aspnet_isapi.dll ファイルに割り当てる必要はありません。拡張子は Web.config ファイルで割り当てることができます。
統合モードで実行されている IIS 7.0 向けに HTTP ハンドラを登録するには
HTTP ハンドラ クラスをコンパイルし、作成されたアセンブリを、アプリケーションのルート フォルダの下にある Bin フォルダにコピーします。
または
ハンドラのソース コードをアプリケーションの App_Code フォルダに保存します。
HTTP ハンドラの例については、「チュートリアル : 同期 HTTP ハンドラの作成」を参照してください。
アプリケーションの Web.config ファイルで、system.webServer セクションに handlers 要素を作成します。
メモ : httpHandlers 要素で定義されているハンドラは使用されません。httpHandlers の登録を削除しない場合は、エラーが発生しないように、validation 要素の validateIntegratedModeConfiguration 属性を false に設定する必要があります。validation 要素は、system.webServer 要素の子要素です。詳細については、「ASP.NET Integration with IIS 7.0」の「Disabling the migration error message」を参照してください。
次の例では、SampleHandler.new リソースへの要求に応答する HTTP ハンドラを登録する方法を示します。ハンドラはアセンブリ SampleHandlerAssembly 内で SampleHandler クラスとして定義されます。
<configuration> <system.webServer> <handlers> <add name="SampleHandler" verb="*" path="SampleHandler.new" type="SampleHandler, SampleHandlerAssembly" resourceType="Unspecified" /> </handlers> <system.webServer> </configuration>
メモ : resourceType 属性は、IIS 6.0 の IIS マネージャにおける [ファイルの存在を確認する] オプションと同じ機能を果たします。
次の例では、ファイル名拡張子 ".SampleFileExtension" を持つファイルに対するすべての HTTP 要求を SampleHandler2 HTTP ハンドラ クラスにマッピングする方法を示します。この場合、ハンドラ コードが App_Code フォルダにあるため、アセンブリを指定する必要はありません。
<configuration> <system.webServer> <handlers> <add name="SampleHandler2" verb="*" path="*.SampleFileExtension" type="SampleHandler2" /> resourceType="Unspecified" /> <handlers> <system.webServer> </configuration>
統合モードで実行されている IIS 7.0 の場合は、handlers 要素での登録のみが必要です。
IIS の web.webServer 構成要素の詳細については、MSDN Web サイトの「system.webServer Section Group (IIS Settings Schema)」を参照してください。
カスタムのファイル名拡張子に対応するハンドラを構成する方法の詳細については、「方法 : IIS で HTTP ハンドラ拡張子を構成する」を参照してください。