Freigeben über


Grundlegendes zu Aktionsfiltern (VB)

von Microsoft

PDF herunterladen

Das Ziel dieses Tutorials besteht darin, Aktionsfilter zu erläutern. Ein Aktionsfilter ist ein Attribut, das Sie auf eine Controlleraktion - oder einen gesamten Controller - anwenden können, das die Art und Weise ändert, in der die Aktion ausgeführt wird.

Grundlegendes zu Aktionsfiltern

Das Ziel dieses Tutorials besteht darin, Aktionsfilter zu erläutern. Ein Aktionsfilter ist ein Attribut, das Sie auf eine Controlleraktion - oder einen gesamten Controller - anwenden können, das die Art und Weise ändert, in der die Aktion ausgeführt wird. Das ASP.NET MVC-Frameworks enthält mehrere Aktionsfilter:

  • OutputCache: Dieser Aktionsfilter speichert die Ausgabe einer Controlleraktion für einen bestimmten Zeitraum zwischen.
  • HandleError: Dieser Aktionsfilter behandelt Fehler, die beim Ausführen einer Controlleraktion ausgelöst werden.
  • Autorisieren: Mit diesem Aktionsfilter können Sie den Zugriff auf einen bestimmten Benutzer oder eine bestimmte Rolle einschränken.

Sie können auch eigene benutzerdefinierte Aktionsfilter erstellen. Sie können beispielsweise einen benutzerdefinierten Aktionsfilter erstellen, um ein benutzerdefiniertes Authentifizierungssystem zu implementieren. Alternativ können Sie einen Aktionsfilter erstellen, der die von einer Controlleraktion zurückgegebenen Ansichtsdaten ändert.

In diesem Tutorial erfahren Sie, wie Sie einen Aktionsfilter von Grund auf erstellen. Wir erstellen einen Protokollaktionsfilter, der verschiedene Phasen der Verarbeitung einer Aktion im Visual Studio-Ausgabefenster protokolliert.

Verwenden eines Aktionsfilters

Ein Aktionsfilter ist ein Attribut. Sie können die meisten Aktionsfilter entweder auf eine einzelne Controlleraktion oder auf einen gesamten Controller anwenden.

Beispielsweise macht der Datencontroller in Listing 1 eine Aktion mit dem Namen Index() verfügbar, die die aktuelle Zeit zurückgibt. Diese Aktion ist mit dem OutputCache Aktionsfilter versehen. Dieser Filter bewirkt, dass der von der Aktion zurückgegebene Wert 10 Sekunden lang zwischengespeichert wird.

Eintrag 1 – Controllers\DataController.vb

Public Class DataController
     Inherits System.Web.Mvc.Controller

     <OutputCache(Duration:=10)> _
     Function Index()
          Return DateTime.Now.ToString("T")

     End Function

End Class

Wenn Sie die Index() Aktion wiederholt aufrufen, indem Sie die URL /Data/Index in die Adressleiste Ihres Browsers eingeben und mehrmals auf die Schaltfläche Aktualisieren klicken, wird die gleiche Zeit für 10 Sekunden angezeigt. Die Ausgabe der Index() Aktion wird 10 Sekunden lang zwischengespeichert (siehe Abbildung 1).

Zwischengespeicherte Zeit

Abbildung 01: Zwischengespeicherte Zeit (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

In Listing 1 wird ein einzelner Aktionsfilter – der OutputCache Aktionsfilter – auf die Index() -Methode angewendet. Bei Bedarf können Sie mehrere Aktionsfilter auf dieselbe Aktion anwenden. Beispielsweise können Sie sowohl die OutputCache Aktionsfilter als HandleError auch auf dieselbe Aktion anwenden.

In Listing 1 wird der OutputCache Aktionsfilter auf die Index() Aktion angewendet. Sie können dieses Attribut auch auf die DataController Klasse selbst anwenden. In diesem Fall wird das von einer aktion zurückgegebene Ergebnis, das vom Controller verfügbar gemacht wird, 10 Sekunden lang zwischengespeichert.

Die verschiedenen Filtertypen

Das ASP.NET MVC-Framework unterstützt vier verschiedene Filtertypen:

  1. Autorisierungsfilter: Implementiert das IAuthorizationFilter Attribut.
  2. Aktionsfilter: Implementiert das IActionFilter Attribut.
  3. Ergebnisfilter: Implementiert das IResultFilter Attribut.
  4. Ausnahmefilter: Implementiert das IExceptionFilter Attribut.

Filter werden in der oben aufgeführten Reihenfolge ausgeführt. Beispielsweise werden Autorisierungsfilter immer ausgeführt, bevor Aktionsfilter und Ausnahmefilter immer nach jedem anderen Filtertyp ausgeführt werden.

Autorisierungsfilter werden verwendet, um Authentifizierung und Autorisierung für Controlleraktionen zu implementieren. Der Autorisierungsfilter ist beispielsweise ein Beispiel für einen Autorisierungsfilter.

Aktionsfilter enthalten Logik, die vor und nach der Ausführung einer Controlleraktion ausgeführt wird. Sie können einen Aktionsfilter für instance verwenden, um die Von einer Controlleraktion zurückgegebenen Ansichtsdaten zu ändern.

Ergebnisfilter enthalten Logik, die vor und nach der Ausführung eines Ansichtsergebnisses ausgeführt wird. Beispielsweise können Sie ein Ansichtsergebnis direkt ändern, bevor die Ansicht im Browser gerendert wird.

Ausnahmefilter sind der letzte Filtertyp, der ausgeführt werden soll. Sie können einen Ausnahmefilter verwenden, um Fehler zu behandeln, die entweder durch Ihre Controlleraktionen oder Controlleraktionsergebnisse ausgelöst werden. Sie können auch Ausnahmefilter verwenden, um Fehler zu protokollieren.

Jeder andere Filtertyp wird in einer bestimmten Reihenfolge ausgeführt. Wenn Sie die Reihenfolge steuern möchten, in der Filter desselben Typs ausgeführt werden, können Sie die Order-Eigenschaft eines Filters festlegen.

Die Basisklasse für alle Aktionsfilter ist die System.Web.Mvc.FilterAttribute -Klasse. Wenn Sie einen bestimmten Filtertyp implementieren möchten, müssen Sie eine Klasse erstellen, die von der Filter-Basisklasse erbt und mindestens eine der Schnittstellen IAuthorizationFilter, IActionFilter, IResultFilter oder ExceptionFilter implementiert.

Die Base ActionFilterAttribute-Klasse

Um die Implementierung eines benutzerdefinierten Aktionsfilters zu vereinfachen, enthält das ASP.NET MVC-Framework eine Basisklasse ActionFilterAttribute . Diese Klasse implementiert sowohl die IActionFilter Schnittstellen als IResultFilter auch und erbt von der Filter -Klasse.

Die Terminologie hier ist nicht vollständig konsistent. Technisch gesehen ist eine Klasse, die von der ActionFilterAttribute-Klasse erbt, sowohl ein Aktionsfilter als auch ein Ergebnisfilter. Im losen Sinne wird der Wortaktionsfilter jedoch verwendet, um auf einen beliebigen Filtertyp im ASP.NET MVC-Framework zu verweisen.

Die ActionFilterAttribute-Basisklasse verfügt über die folgenden Methoden, die Sie außer Kraft setzen können:

  • OnActionExecuting: Diese Methode wird aufgerufen, bevor eine Controlleraktion ausgeführt wird.
  • OnActionExecuted: Diese Methode wird aufgerufen, nachdem eine Controlleraktion ausgeführt wurde.
  • OnResultExecuting: Diese Methode wird aufgerufen, bevor ein Controlleraktionsergebnis ausgeführt wird.
  • OnResultExecuted: Diese Methode wird aufgerufen, nachdem ein Controlleraktionsergebnis ausgeführt wurde.

Im nächsten Abschnitt erfahren Sie, wie Sie diese verschiedenen Methoden implementieren können.

Erstellen eines Protokollaktionsfilters

Um zu veranschaulichen, wie Sie einen benutzerdefinierten Aktionsfilter erstellen können, erstellen wir einen benutzerdefinierten Aktionsfilter, der die Phasen der Verarbeitung einer Controlleraktion im Visual Studio-Ausgabefenster protokolliert. Unsere LogActionFilter ist in Listing 2 enthalten.

Eintrag 2 – ActionFilters\LogActionFilter.vb

Public Class LogActionFilter
     Inherits ActionFilterAttribute

     Public Overrides Sub OnActionExecuting(ByVal filterContext As ActionExecutingContext)
          Log("OnActionExecuting", filterContext.RouteData)

     End Sub

     Public Overrides Sub OnActionExecuted(ByVal filterContext As ActionExecutedContext)
          Log("OnActionExecuted", filterContext.RouteData)
     End Sub

     Public Overrides Sub OnResultExecuting(ByVal filterContext As ResultExecutingContext)
          Log("OnResultExecuting", filterContext.RouteData)
     End Sub

     Public Overrides Sub OnResultExecuted(ByVal filterContext As ResultExecutedContext)
          Log("OnResultExecuted", filterContext.RouteData)
     End Sub

     Private Sub Log(ByVal methodName As String, ByVal routeData As RouteData)
          Dim controllerName = routeData.Values("controller")
          Dim actionName = routeData.Values("action")
          Dim message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName)
          Debug.WriteLine(message, "Action Filter Log")
     End Sub

End Class

In Listing 2 rufen die OnActionExecuting()Methoden , OnActionExecuted(), OnResultExecuting()und OnResultExecuted() alle die Log() -Methode auf. Der Name der Methode und die aktuellen Routendaten werden an die Log() -Methode übergeben. Die Log() -Methode schreibt eine Nachricht in das Visual Studio-Ausgabefenster (siehe Abbildung 2).

Schreiben in das Visual Studio-Ausgabefenster

Abbildung 02: Schreiben in das Visual Studio-Ausgabefenster (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Der Home-Controller in Listing 3 veranschaulicht, wie Sie den Protokollaktionsfilter auf eine gesamte Controllerklasse anwenden können. Wenn eine der vom Home-Controller verfügbar gemachten Aktionen aufgerufen wird – entweder die Index() -Methode oder die About() -Methode –, werden die Phasen der Verarbeitung der Aktion im Visual Studio-Ausgabefenster protokolliert.

Eintrag 3 – Controllers\HomeController.vb

<LogActionFilter()> _
Public Class HomeController
     Inherits System.Web.Mvc.Controller

     Function Index()
          Return View()
     End Function

     Function About()
          Return View()
     End Function

            End Class

Zusammenfassung

In diesem Tutorial haben Sie ASP.NET MVC-Aktionsfilter vorgestellt. Sie haben die vier verschiedenen Filtertypen kennengelernt: Autorisierungsfilter, Aktionsfilter, Ergebnisfilter und Ausnahmefilter. Sie haben auch etwas über die Basisklasse ActionFilterAttribute gelernt.

Schließlich haben Sie gelernt, wie Sie einen einfachen Aktionsfilter implementieren. Wir haben einen Protokollaktionsfilter erstellt, der die Phasen der Verarbeitung einer Controlleraktion im Visual Studio-Ausgabefenster protokolliert.