Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
von Microsoft
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).
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:
- Autorisierungsfilter: Implementiert das
IAuthorizationFilter
Attribut. - Aktionsfilter: Implementiert das
IActionFilter
Attribut. - Ergebnisfilter: Implementiert das
IResultFilter
Attribut. - 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).
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.