In der J2EE-Webentwicklung gibt es einen Filter, der den Zugriff auf bestimmte URLs abfangen und die Filtermethode entsprechend der tatsächlichen Anwendungssituation ausführen kann Die Sitzungsinformationen können auch zur Berechtigungssteuerung verwendet werden. Kurz gesagt, dieser Filter ist eine Anwendung des Chain-of-Responsibility-Designmusters.
Ist es also möglich, eine solche Filterstruktur in ASP.NET zu definieren und entsprechende logische Operationen im Filter durchzuführen? Die Antwort lautet: Ja. In diesem Artikel erfahren Sie, wie Sie einen Filter in einer IIS-Webanwendung konfigurieren, wenn Sie ihn schreiben.
Prozess 1: So schreiben Sie einen Filter
Beim Schreiben eines Filters wird tatsächlich eine Filterklasse geschrieben, dh ein HttpModule-Modul. Dieser Filter sollte die IHttpModule-Basisklasse implementieren und das Schreiben wiederholen Init-Methode und geben Sie ein praktisches Beispiel wie folgt:
Dies ist ein 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; } }
Es ist zu beachten, dass „Filter“ auch „Interceptor“ genannt werden kann Dies ist der Prozess des Abfangens der gesamten HTTP-Anforderung/Antwort. Da der gesamte Anforderungs-/Antwortprozess in viele Phasen unterteilt werden kann, entsteht ein Problem, nämlich welche spezifische Phase Ihr Filter abfangen möchte, wie oben beschrieben Mit der Init-Funktion können Sie die spezifischen Phasen definieren, die Sie abfangen möchten. Das obige Abfangen ist beispielsweise die Phase, in der die Anforderungssitzung generiert wird, und die entsprechende Verarbeitungsfunktion nach dem Abfangen ist Application_AcquireRequestState Im Folgenden wird eine Application_AcquireRequestState-Methode definiert. In dieser Methode können Sie eine Reihe von Objekten wie Anwendung, Kontext, Sitzung, Anforderung und Antwort durch erzwungene Typkonvertierung abrufen Bestimmen Sie, ob der aktuelle URL-Zugriff legal ist. Überprüfen Sie, ob der aktuelle Zugriff der Zugriff des Benutzers nach der Anmeldung ist usw.
Da es im gesamten Abfangprozess viele Phasen gibt, wie kann man dann andere Phasen abfangen? Dies sollte sehr einfach sein. Definieren Sie es einfach gemäß der folgenden Logik in Init:
application.Standard name of the stage 1 += new EventHandler (der entsprechende Verarbeitungsmethodenname dieser Stufe 1). );
Anwendung. Der Standardname der Stufe 2 += neuer EventHandler (der Name der Verarbeitungsmethode, der dieser Stufe 2 entspricht); . . Die Standardnamen von
<configuration> <system.web> <httpModules> <add name="pageModule" type="PageFilter"/> </httpModules> </system.web> </configuration>