J2EE Web開発にはフィルタフィルタがあり、このフィルタは指定されたURLアクセスを傍受し、実際のアプリケーションの状況に応じてフィルタメソッドを実行することができ、フィルタ内でリクエストされたコードやセッション情報を変更することもできます。つまり、このフィルタは非常に意味があり、J2EE における責任連鎖設計パターンの応用とも言えます。
それでは、ASP.NET でそのようなフィルター構造を定義し、フィルター内で対応する論理演算を実行することは可能でしょうか?答えは「はい」です。この記事では、フィルターを作成する場合に、それを IIS Web アプリケーションに構成する方法について説明します。
プロセス 1: フィルターの作成方法
フィルターの作成は実際にはフィルター クラスを作成すること、つまり HttpModule モジュールを作成することです。このフィルターは IHttpModule 基本クラスを実装し、実践的な例を提供するために Init メソッドを書き直す必要があります。は次のとおりです:
これは PageFilter.cs です
using System; using System.Web; using System.Web.SessionState; using System.Collections.Generic; using System.Collections; using System.Text; using System.IO; public class PageFilter: IHttpModule { public String ModuleName { get { return "PageFilter"; } } //在 Init 方法中注册HttpApplication // 通过委托方式注册事件 public void Init(HttpApplication application) { application.AcquireRequestState += new EventHandler(Application_AcquireRequestState); } private void Application_AcquireRequestState(Object source, EventArgs e) { HttpApplication application = (HttpApplication)source; HttpContext context = application.Context; HttpSessionState session = context.Session; HttpRequest request = context.Request; HttpResponse response = context.Response; String contextPath = request.ApplicationPath; } }
「フィルター」は「インターセプター」とも呼ばれることに注意してください。これは、HTTP リクエスト/レスポンス全体をインターセプトするプロセスです。プロセスは多くのステージに分割できるため、フィルターがどの特定のステージをインターセプトするかという問題が発生します。たとえば、上記の Init 関数で、インターセプトする特定のステージを定義できます。リクエスト セッションを生成する段階では、AcquireRequestStat がこの状態を表し、インターセプト後の対応する処理関数は Application_AcquireRequestState であるため、Application_AcquireRequestState メソッドが以下に定義されます。このメソッドでは、アプリケーション、コンテキスト、セッション、リクエスト、および応答が実行できます。一連のオブジェクトを取得するまで待機します。これらのオブジェクトを取得した後、現在の URL アクセスが正当であるかどうかの判断、現在のアクセスがログ記録後のユーザーのアクセスであるかどうかの確認など、コアとなるビジネス ロジックを作成できます。などで
さらに、傍受のプロセス全体には多くの段階があるため、他の段階をどのように傍受するか?これは、上記と同様に、次のロジックに従って Init で定義するだけです: ステージ 1 の標準名 += new EventHandler (このステージ 1 の対応する処理メソッド名);アプリケーションの標準名 += new EventHandler (このステージ 2 に対応する処理メソッドの名前)。 。 。
フェーズの標準名は、これらのフェーズが標準名を持ち、上記の AcquireRequestState や BeginRequest、AuthenticateRequest、AuthorizeRequest、ResolveRequestCache、AcquireRequestState、PreRequestHandlerExecute、PostRequestHandlerExecute、ReleaseRequestState、UpdateRequestCache、EndRequest などのアプリケーション オブジェクトの標準属性であることを意味します。 、多くのステージなど、これらのステージには特定の意味があります
このステージに対応する処理メソッドの名前は、実際にはこのステージに対応するメソッドの独自の定義であるため、これ以上の説明は行いません。 。
特別な注意が必要な点がもう 1 つあります。インターセプトできるステージは非常に多くありますが、実際のアプリケーションでは、多くの場合、インターセプトできるのは 1 つまたは 2 つのステージだけです。また、一部のサーバー オブジェクトはインターセプトできません。オブジェクトは BeginRequest フェーズには存在しませんが、AcquireRequestState 以降のフェーズには存在するため、実際のニーズに応じて特定のフェーズをインターセプトする必要があります。これは初心者にとって最も一般的な問題です。
プロセス 2: フィルタリングを設定する方法
.cs ファイルのフィルタを作成しましたが、このフィルタをどのように設定する必要がありますか? デフォルトでは絶対にインターセプトされないように設定する必要があります。アプリケーションの Web.config ファイルにサーバーを設定します。
<configuration> <system.web> <httpModules> <add name="pageModule" type="PageFilter"/> </httpModules> </system.web> </configuration>
このようにして、実際に Web サイトを公開して DLL などを生成するだけです。それ以降は自動的にインターセプトされますが、デフォルトではアプリケーションのすべてのリクエストがインターセプトされることを覚えておいてください。たとえば、aspx ファイルに対するリクエストのみをインターセプトする必要があります。フィルター ロジックにファイルのサフィックスを追加します。aspx ではない場合は、そのままにしてください
ASP.NET フィルターの適用方法に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。