ASP.NetでHTTPHandlerを操作する方法
HTTPhandlerは、要求に応答して実行され、拡張機能に基づいて特定の要求を処理するために使用されるエンドポイントとして定義できます。ASP.Netランタイムエンジンは、要求URLのファイル拡張子に基づいて、着信要求を処理するための適切なハンドラーを選択します。それどころか、HttpModuleは、ASP.Net要求処理パイプラインの一部であり、アプリケーションに対して行われるすべての要求で呼び出されるコンポーネントです。HTTPhandlersとHttpModulesの両方の基本的な目的は、パイプラインに前処理ロジックを挿入することであることに注意してください。
アプリケーションがさまざまなサイズの画像を提供する必要があると想定します。カスタムHTTPhandlerを利用して、これらの画像のサイズを変更し、応答を送り返すことができます。カスタムHTTPhandlerを使用する可能性のある別のシナリオは、拡張機能に基づいてアプリケーションで前処理ロジックを実行する場合です。 HTTPhandlerでできることはASP.Netページでもほぼすべて実行できますが、HTTPhandlerは、Webページよりもはるかに移植性が高く再利用可能です。
リソースの要求がASP.Netエンジンに来ると、ASP.Netワーカープロセスは適切なHTTPハンドラーをインスタンス化して、拡張子に基づいて要求をサーバーします。 ASP.NetのHTTPhandlerは、IHTTPhandlerインターフェイスを実装するクラスです。ちなみに、IHTTPhandlerインターフェースはSystem.Web名前空間で使用できます。 PageHandlerFactoryはIHTTPhandlerFactoryインターフェイスを実装し、GetHandlerというメソッドが含まれていることに注意してください。このメソッドは、特定のリクエストをサーバーに送信するための適切なハンドラーを返します。
MSDNは次のように述べています。「ASP.NetHTTPhandlerは、ASP.Net Webアプリケーションに対して行われた要求に応答して実行されるプロセス(「エンドポイント」と呼ばれることが多い)です。最も一般的なハンドラーはASP.Netページハンドラーです。 .aspxファイルを処理します。ユーザーが.aspxファイルを要求すると、その要求はページハンドラーを介してページによって処理されます。」
カスタムHTTPハンドラーの作成
このセクションでは、ASP.NetでカスタムHTTPhandlerを構築する方法について説明します。カスタムHTTPhandlerを構築するには、以下のコードスニペットに示すように、IHTTPhandlerを実装するクラスを作成します。
namespace CustomHTTPhandler
{
public class CustomHTTPhandler : IHTTPhandler
{
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
throw new NotImplementedException();
}
}
}
カスタムHTTPハンドラーには、IsReusableというプロパティとProcessRequestというメソッドが必要であることに注意してください。前者はハンドラーを再利用できるかどうかを指定するために使用されますが、後者は実際の処理を行うメソッドです。本質的に、カスタムHTTPHandlerはIHttphandlerインターフェースを実装し、これら2つのメンバーを定義する必要があります。
ハンドラーの登録
HTTPhandlerのマッピング情報は、構成ファイルで入手できます。machine.configファイルのセクションは次のようになります。
ここで、カスタムHTTPhandlerをいつ呼び出す必要があるかをランタイムに通知する必要もあります。これはどこに指定すればよいですか?そのような詳細はweb.configファイルで指定できます。アプリケーション構成ファイルの構成セクションを使用して、HTTPハンドラーを追加および削除できます。ハンドラーをアプリケーションのweb.configファイルに登録する方法は次のとおりです。
それで、私たちはここで何をしましたか?ハンドラーを登録し、.idgaspxの拡張子のリクエストが到着した場合、そのリクエストをCustomHTTPhandlerという名前のカスタムHttpハンドラーにルーティングするように指定しました。
.aspx Webページとは異なり、HTTPhandlerには視覚要素がないことに注意してください。カスタムライブラリにHTTPhandlerを作成し、必要に応じて再利用できます。
非同期HTTPハンドラー
ASP.Netの新しいバージョンは、非同期Httpハンドラーのサポートを提供します。async / awaitとTPLを利用して、ASP.Netで非同期HTTPハンドラーを構築できます。カスタム非同期HTTPhandlerを作成するには、HttpTaskAsyncHandlerクラスを継承する必要があります。HttpTaskAsyncHandler抽象クラスは、IHttpAsyncHandlerおよびIHTTPhandlerインターフェースを実装します。次のコードスニペットは、カスタム非同期HTTPhandlerが一見どのように見えるかを示しています。
public class CustomHTTPhandler : HttpTaskAsyncHandler
{
public override Task ProcessRequestAsync(HttpContext context)
{
throw new NotImplementedException();
}
}