Objaśnienie filtrów akcji (VB)
autor: Microsoft
Celem tego samouczka jest wyjaśnienie filtrów akcji. Filtr akcji to atrybut, który można zastosować do akcji kontrolera — lub całego kontrolera — który modyfikuje sposób wykonywania akcji.
Opis filtrów akcji
Celem tego samouczka jest wyjaśnienie filtrów akcji. Filtr akcji to atrybut, który można zastosować do akcji kontrolera — lub całego kontrolera — który modyfikuje sposób wykonywania akcji. Struktura ASP.NET MVC zawiera kilka filtrów akcji:
- OutputCache — ten filtr akcji buforuje dane wyjściowe akcji kontrolera przez określony czas.
- HandleError — ten filtr akcji obsługuje błędy zgłaszane podczas wykonywania akcji kontrolera.
- Autoryzowanie — ten filtr akcji umożliwia ograniczenie dostępu do określonego użytkownika lub roli.
Możesz również utworzyć własne niestandardowe filtry akcji. Na przykład możesz utworzyć niestandardowy filtr akcji w celu zaimplementowania niestandardowego systemu uwierzytelniania. Możesz też utworzyć filtr akcji, który modyfikuje dane widoku zwrócone przez akcję kontrolera.
Z tego samouczka dowiesz się, jak utworzyć filtr akcji od podstaw. Tworzymy filtr akcji Dziennik, który rejestruje różne etapy przetwarzania akcji w oknie Dane wyjściowe programu Visual Studio.
Używanie filtru akcji
Filtr akcji jest atrybutem. Większość filtrów akcji można zastosować do akcji pojedynczego kontrolera lub całego kontrolera.
Na przykład kontroler danych na liście 1 uwidacznia akcję o nazwie Index()
zwracającą bieżący czas. Ta akcja jest ozdobiona filtrem OutputCache
akcji. Ten filtr powoduje, że wartość zwracana przez akcję jest buforowana przez 10 sekund.
Lista 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
Jeśli wielokrotnie wywołujesz Index()
akcję, wprowadzając adres URL /Data/Index na pasku adresu przeglądarki i naciskając przycisk Odśwież wiele razy, zobaczysz ten sam czas przez 10 sekund. Dane wyjściowe Index()
akcji są buforowane przez 10 sekund (patrz Rysunek 1).
Rysunek 01. Czas buforowania (kliknij, aby wyświetlić obraz pełnowymiarowy)
Na liście 1 filtr pojedynczej akcji — OutputCache
filtr akcji — jest stosowany do Index()
metody . Jeśli potrzebujesz, możesz zastosować wiele filtrów akcji do tej samej akcji. Na przykład możesz zastosować zarówno filtry akcji, jak OutputCache
i HandleError
do tej samej akcji.
Na liście 1 OutputCache
filtr akcji jest stosowany do Index()
akcji. Można również zastosować ten atrybut do DataController
samej klasy. W takim przypadku wynik zwrócony przez dowolną akcję uwidoczniną przez kontroler będzie buforowany przez 10 sekund.
Różne typy filtrów
Struktura ASP.NET MVC obsługuje cztery różne typy filtrów:
- Filtry autoryzacji — implementuje
IAuthorizationFilter
atrybut. - Filtry akcji — implementuje
IActionFilter
atrybut. - Filtry wyników — implementuje
IResultFilter
atrybut. - Filtry wyjątków — implementuje
IExceptionFilter
atrybut.
Filtry są wykonywane w kolejności wymienionej powyżej. Na przykład filtry autoryzacji są zawsze wykonywane, zanim filtry akcji i filtry wyjątków są zawsze wykonywane po każdym innym typie filtru.
Filtry autoryzacji służą do implementowania uwierzytelniania i autoryzacji dla akcji kontrolera. Na przykład filtr Autoryzacja jest przykładem filtru autoryzacji.
Filtry akcji zawierają logikę wykonywaną przed wykonaniem akcji kontrolera i po jej wykonaniu. Możesz użyć filtru akcji, na przykład, aby zmodyfikować dane widoku zwracane przez akcję kontrolera.
Filtry wyników zawierają logikę wykonywaną przed i po wykonaniu wyniku widoku. Na przykład możesz zmodyfikować wynik widoku bezpośrednio przed renderowaniem widoku w przeglądarce.
Filtry wyjątków to ostatni typ filtru do uruchomienia. Filtr wyjątku umożliwia obsługę błędów zgłaszanych przez akcje kontrolera lub wyniki akcji kontrolera. Możesz również użyć filtrów wyjątków, aby rejestrować błędy.
Każdy inny typ filtru jest wykonywany w określonej kolejności. Jeśli chcesz kontrolować kolejność wykonywania filtrów tego samego typu, możesz ustawić właściwość Order filtru.
Klasa bazowa dla wszystkich filtrów akcji jest klasą System.Web.Mvc.FilterAttribute
. Jeśli chcesz zaimplementować określony typ filtru, musisz utworzyć klasę dziedziczą po klasie filtru podstawowego i implementuje co najmniej jeden z interfejsów IAuthorizationFilter, IActionFilter, IResultFilter lub ExceptionFilter.
Klasa Base ActionFilterAttribute
Aby ułatwić zaimplementowanie niestandardowego filtru akcji, struktura ASP.NET MVC zawiera klasę bazową ActionFilterAttribute
. Ta klasa implementuje zarówno interfejsy, jak IActionFilter
i IResultFilter
i dziedziczy z Filter
klasy .
Terminologia w tym miejscu nie jest całkowicie spójna. Technicznie klasa dziedziczona z klasy ActionFilterAttribute jest zarówno filtrem akcji, jak i filtrem wyników. Jednak w luźnym sensie filtr akcji wyrazu jest używany do odwoływania się do dowolnego typu filtru w strukturze ASP.NET MVC.
Podstawowa klasa ActionFilterAttribute ma następujące metody, które można zastąpić:
- OnActionExecuting — ta metoda jest wywoływana przed wykonaniem akcji kontrolera.
- OnActionExecuted — ta metoda jest wywoływana po wykonaniu akcji kontrolera.
- OnResultExecuting — ta metoda jest wywoływana przed wykonaniem wyniku akcji kontrolera.
- OnResultExecuted — ta metoda jest wywoływana po wykonaniu wyniku akcji kontrolera.
W następnej sekcji zobaczymy, jak można zaimplementować każdą z tych różnych metod.
Tworzenie filtru akcji dziennika
Aby zilustrować sposób tworzenia niestandardowego filtru akcji, utworzymy niestandardowy filtr akcji, który rejestruje etapy przetwarzania akcji kontrolera w oknie Dane wyjściowe programu Visual Studio. Nasz LogActionFilter
jest zawarty w liście 2.
Lista 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
Na liście 2 metody OnActionExecuting()
, OnActionExecuted()
, OnResultExecuting()
i OnResultExecuted()
wszystkie wywołają metodę Log()
. Nazwa metody i bieżące dane trasy są przekazywane do Log()
metody. Metoda Log()
zapisuje komunikat w oknie Dane wyjściowe programu Visual Studio (zobacz Rysunek 2).
Rysunek 02. Zapisywanie w oknie Dane wyjściowe programu Visual Studio (kliknij, aby wyświetlić obraz pełnowymiarowy)
Kontroler główny na liście 3 ilustruje, jak można zastosować filtr akcji Dziennik do całej klasy kontrolera. Za każdym razem, gdy dowolne akcje uwidocznione przez kontroler główny są wywoływane — Index()
metoda lub About()
metoda — etapy przetwarzania akcji są rejestrowane w oknie Dane wyjściowe programu Visual Studio.
Lista 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
Podsumowanie
W tym samouczku przedstawiono filtry akcji MVC ASP.NET. Przedstawiono cztery różne typy filtrów: filtry autoryzacji, filtry akcji, filtry wyników i filtry wyjątków. Przedstawiono również informacje o klasie bazowej ActionFilterAttribute
.
Na koniec przedstawiono sposób implementowania prostego filtru akcji. Utworzyliśmy filtr akcji Dziennik, który rejestruje etapy przetwarzania akcji kontrolera w oknie Dane wyjściowe programu Visual Studio.