Objaśnienie filtrów akcji (VB)

autor: Microsoft

Pobierz plik PDF

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).

Czas buforowany

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:

  1. Filtry autoryzacji — implementuje IAuthorizationFilter atrybut.
  2. Filtry akcji — implementuje IActionFilter atrybut.
  3. Filtry wyników — implementuje IResultFilter atrybut.
  4. 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).

Zapisywanie w oknie Dane wyjściowe programu Visual Studio

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.