この記事で後ほど説明するトピックを完全に理解するには、IIS と ASP.NET の間の通信プロセスを簡単に理解する必要があります。ここで説明しているのは IIS 6 サーバーです。 IIS 5 と IIS 7 に関しては、前者は削除されたと言えますが、後者の「クラシック モード」は IIS 6 とまったく同じであり、新しい「パイプライン モード」は実際には ASP のいくつかの概念について話しています。 NET と IIS の緊密な統合。 IIS 6 と ASP.NET を理解していれば、IIS 7 の統合モードで問題は発生しないと思います。
まず、要求の受信から応答を返すまでの IIS のプロセス全体におけるいくつかの主な手順を示す簡単な概略図を見てみましょう。
ASP.NET アプリケーションで URL 書き換えを実行する場合は、通常、BeginRequest イベントで HttpContext の RewritePath メソッドを呼び出して、リクエストをターゲット URL に再配置します。たとえば、Global.asax の Application_BeginRequest メソッドをオーバーライドして、これを実現できます。
BeginRequest で Rewrite が実行される理由は、このイベントがすべての Pipeline イベントの中で最も早くトリガーされるためです。この時点で再配置すると、現在の HttpContext の一部のプロパティもそれに応じて変更されます (HttpContext.Request.Path など)。このようにして、次のパイプライン イベントのハンドラー ロジックが影響を受けます。たとえば、ディレクトリに基づいてアクセス許可を決定する必要がある場合、ASP.NET が受信した要求の代わりに、「場所にある」パスが使用されます。当然のことながら、最も「重要な」変更はハンドラーの選択です。たとえば、上記の例では、ASP.NET エンジンが System.Web.UI を選択するように、リクエストを「CustomerList.aspx」ファイルに再配置します。 *.aspx に対応します。PageHandlerFactory クラスはリクエストを処理します。
パブリッククラスグローバル: System.Web .
{
protected void Application_BeginRequest(オブジェクト送信者, EventArgs e)
{
HttpContextコンテキスト = HttpContext .Current;
if (context.Request.Path.Equals( "/Customers" ,
StringComparison .InvariantCultureIgnoreCase))
{
context.RewritePath( "~/CustomerList.aspx" );
}
}
が
、「ASP.NET パイプライン」と「Web フォーム」という 2 つの概念を区別する必要があります。どちらも ASP.NET の重要なモデルですが、違いは依然として非常に大きいです。
実際、上の文の「形式」という言葉は正確ではないかもしれません。 Web フォームはおそらく独立して使用できる実行エンジンとモデルであるはずであり、System.Web.UI.PageHandlerFactory はこのモデルのみを使用するためです。 ASP.NET アプリケーションを作成する場合、必要に応じてこのモデルを他の場所で使用できます。たとえば、記事「 テクニック: HTML 生成にユーザー コントロールを使用する」では、コンテンツを生成するためのジェネリック ハンドラーのテンプレートとして ascx を使用しています。