Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in die Anwendungsmethode des ASP.NET-Filters

Einführung in die Anwendungsmethode des ASP.NET-Filters

高洛峰
高洛峰Original
2017-01-21 15:06:321723Durchsuche

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

Phasen bedeuten, dass diese Phasen Standardnamen haben und Standardattribute des Anwendungsobjekts sind, wie z. B. AcquireRequestState oben und andere wie BeginRequest, AuthenticateRequest, AuthorizeRequest, ResolveRequestCache, AcquireRequestState, PreRequestHandlerExecute und PostRequestHandlerExecute , ReleaseRequestState, UpdateRequestCache, EndRequest, viele Stufen usw. Diese Stufen haben spezifische Bedeutungen

Der Name der dieser Stufe entsprechenden Verarbeitungsmethode ist tatsächlich Ihre eigene Definition der dieser Stufe entsprechenden Methode oben, keine weitere Erklärung.

Ein weiterer Punkt, der besondere Aufmerksamkeit erfordert, ist, dass es so viele Stufen gibt, die abgefangen werden können, aber in tatsächlichen Anwendungen fangen wir oft nur eine oder zwei Stufen ab, und es sollte beachtet werden, dass einige Serverobjekte nur abgefangen werden können Das Session-Objekt existiert beispielsweise nicht in der BeginRequest-Phase, sondern in der AcquireRequestState-Phase. Daher müssen bestimmte Phasen entsprechend den tatsächlichen Anforderungen abgefangen werden.

Prozess 2: So konfigurieren Sie die Filterung

Wir haben einen Filter für eine .cs-Datei geschrieben. Wie kann dieser Filter also konfiguriert werden? Die Standardeinstellung lautet definitiv nicht Abfangen, Sie müssen den Filter in der Web.config-Datei der Anwendung konfigurieren. Die Konfiguration des obigen Beispiels ist wie folgt:

<configuration>
<system.web>
 <httpModules>
   <add name="pageModule" type="PageFilter"/>
 </httpModules>
</system.web>
</configuration>
Dies ist tatsächlich konfiguriert und veröffentlicht dann die Website, um DLL usw. zu generieren . Das ist es, der URL-Zugriff wird automatisch abgefangen, wenn es soweit ist. Bitte beachten Sie jedoch, dass standardmäßig alle Anfragen für die Anwendung abgefangen werden. Wenn Sie beispielsweise darauf hinweisen, dass bestimmte Anfragen abgefangen werden sollen, möchten Sie nur Anfragen für ASPX-Dateien abfangen . Dann können Sie die Beurteilung des Dateisuffixnamens zur Filterlogik hinzufügen. Wenn es sich nicht um ASPX handelt, lassen Sie es einfach los

Weitere verwandte Artikel zu den Anwendungsmethoden von ASP.NET-Filtern finden Sie hier Achtung auf die chinesische PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn