Sdílet prostřednictvím


Principy filtrů akcí (VB)

od Microsoftu

Stáhnout PDF

Cílem tohoto kurzu je vysvětlit filtry akcí. Filtr akce je atribut, který můžete použít na akci kontroleru – nebo na celý kontroler – a který mění způsob, jakým se akce provádí.

Principy filtrů akcí

Cílem tohoto kurzu je vysvětlit filtry akcí. Filtr akce je atribut, který můžete použít na akci kontroleru – nebo na celý kontroler – a který mění způsob, jakým se akce provádí. Architektura ASP.NET MVC obsahuje několik filtrů akcí:

  • OutputCache – Tento filtr akce ukládá výstup akce kontroleru do mezipaměti po zadanou dobu.
  • HandleError – tento filtr akce zpracovává chyby vyvolané při spuštění akce kontroleru.
  • Autorizovat – Tento filtr akce umožňuje omezit přístup na konkrétního uživatele nebo roli.

Můžete také vytvořit vlastní filtry akcí. Můžete například chtít vytvořit vlastní filtr akcí, abyste implementovali vlastní ověřovací systém. Nebo můžete chtít vytvořit filtr akce, který upraví data zobrazení vrácená akcí kontroleru.

V tomto kurzu se naučíte, jak vytvořit filtr akcí od základů. Vytvoříme filtr akce protokolu, který protokoluje různé fáze zpracování akce do okna Výstup sady Visual Studio.

Použití filtru akcí

Filtr akce je atribut. Filtry většiny akcí můžete použít buď na jednotlivé akce kontroleru, nebo na celý kontroler.

Například kontroler dat ve výpisu 1 zveřejňuje akci s názvem Index() , která vrací aktuální čas. Tato akce je upravena filtrem OutputCache akcí. Tento filtr způsobí, že se hodnota vrácená akcí uloží do mezipaměti po dobu 10 sekund.

Výpis 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

Pokud akci opakovaně vyvoláte Index() zadáním adresy URL /Data/Index do adresního řádku prohlížeče a opakovaným stisknutím tlačítka Aktualizovat, zobrazí se stejný čas po dobu 10 sekund. Výstup akce se ukládá do Index() mezipaměti po dobu 10 sekund (viz obrázek 1).

Čas uložený v mezipaměti

Obrázek 01: Čas uložený v mezipaměti (kliknutím zobrazíte obrázek v plné velikosti)

Ve výpisu 1 se na Index() metodu OutputCache použije jeden filtr akce – filtr akcí. V případě potřeby můžete na stejnou akci použít více filtrů akcí. Pro stejnou akci můžete například použít filtry akcí a OutputCacheHandleError .

Ve výpisu 1 se OutputCache na Index() akci použije filtr akce. Tento atribut můžete použít také na DataController samotnou třídu. V takovém případě se výsledek vrácený jakoukoli akcí vystavenou kontrolerem uloží do mezipaměti po dobu 10 sekund.

Různé typy filtrů

Architektura ASP.NET MVC podporuje čtyři různé typy filtrů:

  1. Filtry autorizace – Implementuje IAuthorizationFilter atribut .
  2. Filtry akcí – Implementuje IActionFilter atribut .
  3. Filtry výsledků – Implementuje IResultFilter atribut .
  4. Filtry výjimek – Implementuje IExceptionFilter atribut .

Filtry se spouštějí ve výše uvedeném pořadí. Autorizační filtry se například vždy spouštějí před tím, než se filtry akcí a filtry výjimek vždy spustí po každém druhém typu filtru.

Filtry autorizace se používají k implementaci ověřování a autorizace pro akce kontroleru. Příkladem filtru Autorizace je například filtr Autorizace.

Filtry akcí obsahují logiku, která se provádí před a po provedení akce kontroleru. Filtr akcí můžete použít například k úpravě dat zobrazení, která vrátí akce kontroleru.

Filtry výsledků obsahují logiku, která se spouští před a po spuštění výsledku zobrazení. Můžete například chtít upravit výsledek zobrazení těsně před tím, než se zobrazení vykreslí do prohlížeče.

Filtry výjimek jsou posledním typem filtru, který se má spustit. Filtr výjimek můžete použít ke zpracování chyb vyvolaných akcemi kontroleru nebo výsledky akce kontroleru. K protokolování chyb můžete také použít filtry výjimek.

Každý jiný typ filtru se provádí v určitém pořadí. Pokud chcete určit pořadí, ve kterém se budou filtry stejného typu spouštět, můžete nastavit vlastnost Order filtru.

Základní třídou pro všechny filtry akcí je System.Web.Mvc.FilterAttribute třída . Pokud chcete implementovat konkrétní typ filtru, je třeba vytvořit třídu, která dědí ze základní třídy Filter a implementuje jeden nebo více IAuthorizationFilter, IActionFilter, IResultFilter nebo ExceptionFilter rozhraní.

Základní třída ActionFilterAttribute

Aby bylo možné usnadnit implementaci vlastního filtru akcí, obsahuje rozhraní ASP.NET MVC základní ActionFilterAttribute třídu. Tato třída implementuje rozhraní a IActionFilterIResultFilter a dědí z Filter třídy .

Terminologie zde není zcela konzistentní. Technicky vzato je třída, která dědí z třídy ActionFilterAttribute, filtr akcí i filtr výsledků. Ve volném smyslu se ale filtr akce slova používá k odkazování na libovolný typ filtru v architektuře ASP.NET MVC.

Základní třída ActionFilterAttribute má následující metody, které můžete přepsat:

  • OnActionExecuting – Tato metoda je volána před provedením akce kontroleru.
  • OnActionExecuted – Tato metoda se volá po provedení akce kontroleru.
  • OnResultExecuting – Tato metoda je volána před provedením výsledku akce kontroleru.
  • OnResultExecuted – Tato metoda je volána po provedení výsledku akce kontroleru.

V další části uvidíme, jak můžete implementovat každou z těchto různých metod.

Vytvoření filtru akce protokolu

Abychom si ukázali, jak můžete vytvořit filtr vlastních akcí, vytvoříme filtr vlastních akcí, který zaznamená fáze zpracování akce kontroleru do okna Výstup v sadě Visual Studio. Naše LogActionFilter je obsažena ve výpisu 2.

Výpis 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

Ve výpisu OnActionExecuting()2 volají metody , OnResultExecuting()OnActionExecuted(), a OnResultExecuted() metodu Log() . Do metody se předá Log() název metody a data aktuální trasy. Metoda Log() zapíše zprávu do okna Výstup sady Visual Studio (viz Obrázek 2).

Zápis do okna Výstup sady Visual Studio

Obrázek 02: Zápis do okna Výstup sady Visual Studio (kliknutím zobrazíte obrázek v plné velikosti)

Domovský kontroler ve výpisu 3 ukazuje, jak můžete použít filtr akce protokolu na celou třídu kontroleru. Pokaždé, když se vyvolá jakákoli akce vystavená kontrolerem Home – buď Index() metoda, nebo About() metoda – fáze zpracování akce se zaprotokolují do okna Výstup sady Visual Studio.

Výpis 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

Souhrn

V tomto kurzu jste se seznámili s ASP.NET filtry akcí MVC. Seznámili jste se se čtyřmi různými typy filtrů: filtry autorizace, filtry akcí, filtry výsledků a filtry výjimek. Dozvěděli jste se také o základní ActionFilterAttribute třídě.

Nakonec jste zjistili, jak implementovat jednoduchý filtr akcí. Vytvořili jsme filtr akce protokolu, který protokoluje fáze zpracování akce kontroleru do okna Výstup sady Visual Studio.