Programovanie

Ako používať filtre akcií v ASP.NET Core MVC

Filtre v ASP.NET Core MVC nám umožňujú vykonávať kód pred alebo po konkrétnych fázach kanálu spracovania požiadaviek. Rôzne typy filtrov zodpovedajú rôznym fázam potrubia, od autorizácie po vykonanie výsledku.

Napríklad môžete využiť filtre akcií v ASP.NET Core MVC na vykonávanie vlastného kódu pred a po vykonaní metódy akcie. Tento článok predstavuje diskusiu o zabudovaných filtroch v ASP.NET Core MVC, o tom, prečo sú užitočné, a o tom, ako môžeme v našich aplikáciách ASP.NET Core používať filtre akcií.

Filtre v ASP.NET Core MVC

ASP.NET Core MVC obsahuje mnoho zabudovaných filtrov. Medzi ne patria:

  • Filtre akcií. Vykonávajú sa pred a po vykonaní akčnej metódy radiča.
  • AuthorizationFilters. Tieto filtre sa vykonávajú na začiatku procesu požiadaviek. Používajú sa na overenie poverení používateľa na kontrolu, či je používateľ autorizovaný.
  • Filtre zdrojov. Tieto filtre sa vykonajú po autorizácii a predtým, ako dôjde k väzbe modelu. Na implementáciu ukladania do pamäte cache môžete využiť ResourceFilters.
  • Filtre výsledkov. Tieto filtre sa používajú na spustenie kódu pred a po vykonaní metódy IActionResult metódy akcie.
  • Filtre výnimiek. Tieto filtre sa používajú na spracovanie akýchkoľvek výnimiek, ktoré sa vyskytnú v potrubí. Môžete použiť ExceptionFilters na vykonanie vlastného kódu, keď dôjde k výnimke.

Výber typu použitého filtra závisí od toho, čo sa snažíte dosiahnuť. Napríklad, ak sa pokúšate skratovať požiadavku (t. J. Zastaviť vykonanie metódy akcie a predčasne vrátiť výsledok), použili by ste filter prostriedkov. Prípadne, ak sa pokúšate zmeniť parametre metódy akcie a výsledok vrátený z metódy akcie, použili by ste filter akcií.

Trieda ActionFilterAttribute implementuje rozhrania IActionFilter, IAsyncActionFilter, IResultFilter, IAsyncResultFilter a IOrderedFilter. Túto triedu môžete využiť na implementáciu filtra metód, filtra radiča alebo globálneho filtra. Preskúmame to ďalej v tomto článku.

Vytvorte projekt webového rozhrania ASP.NET Core vo Visual Studio 2017

Najprv si vytvoríme projekt webového rozhrania ASP.NET Core v Visual Studio. Ak je Visual Studio 2017 vo vašom systéme funkčné, vytvorte projekt ASP.NET Core MVC podľa krokov uvedených nižšie.

  1. Spustite Visual Studio 2017 IDE.
  2. Kliknite na Súbor> Nové> Projekt.
  3. V zozname zobrazených šablón vyberte možnosť „Webová aplikácia ASP.NET Core (.NET Core)“.
  4. Zadajte názov projektu.
  5. Kliknutím na tlačidlo OK projekt uložíte.
  6. Zobrazí sa nové okno „Nová webová aplikácia .NET Core…“.
  7. Z rozbaľovacieho zoznamu v hornej časti vyberte .NET Core ako runtime a ASP.NET Core 2.1 (alebo novší).
  8. Ako šablónu projektu vyberte „Webová aplikácia (Model-View-Controller)“.
  9. Skontrolujte, či nie sú začiarknuté políčka „Povoliť podporu Docker“ a „Konfigurovať pre HTTPS“. Tieto funkcie tu nebudeme používať.
  10. Skontrolujte, či je vybratá možnosť „Žiadne overenie“. Ani tu nebudeme používať autentifikáciu.

Týmto sa v Visual Studio vytvorí nový projekt ASP.NET Core MVC. Tento projekt použijeme na implementáciu našich filtrov akcií v nasledujúcich častiach.

Vytvorte vlastný filter akcií v ASP.NET Core MVC

Môžete využiť výhody vlastných filtrov akcií na vykonanie opakovane použiteľného kódu pred alebo po vykonaní metódy akcie. Nasledujúce abstraktné základné triedy môžete rozšíriť a vytvoriť tak vlastné filtre. Upozorňujeme, že každá z týchto abstraktných tried rozširuje triedu Atribút.

  • ActionFilterAttribute
  • ResultFilterAttribute
  • ExceptionFilterAttribute
  • ServiceFilterAttribute
  • TypeFilterAttribute

Môžete tiež rozšíriť rozhranie IActionFilter a implementovať jeho metódy na vytvorenie vlastného filtra. Môžete vytvárať synchrónne aj asynchrónne filtre.

Vytvorte filter synchrónnej akcie v ASP.NET Core MVC

Nasledujúci úryvok kódu ilustruje, ako je možné vytvoriť filter synchrónnych akcií rozšírením rozhrania IActionFilter a implementáciou metód OnActionExecuting a OnActionExecuted.

verejná trieda SimpleActionFilter: IActionFilter

    {

public void OnActionExecuting (ActionExecutingContext kontext)

        {

// táto metóda bude vykonaná pred vykonaním metódy akcie

        }

public void OnActionExecuted (kontext ActionExecutedContext)

        {

// táto metóda sa vykoná po vykonaní metódy akcie

        }

    }

Vytvorte filter asynchrónnej akcie v ASP.NET Core MVC

Ak chcete vytvoriť filter asynchrónnych akcií, môžete rozšíriť rozhranie IAsyncActionFilter a implementovať metódu OnActionExecutionAsync, ako je uvedené v útržku kódu nižšie.

verejná trieda SimpleAsyncActionFilter: IAsyncActionFilter

    {

verejná asynchronná úloha OnActionExecutionAsync (kontext ActionExecutingContext,

ActionExecutionDelegate next)

        {

// tu napísaný kód sa vykoná pred vykonaním metódy akcie

čakať na next ();

// tu napísaný kód sa vykoná po vykonaní metódy akcie

        }

    }

Pridajte filter akcií v metóde ConfigureServices v ASP.NET Core

Môžete pridať filtre na rôznych úrovniach rozsahu. Patria sem rozsah činnosti, rozsah radiča a globálny rozsah. Nasledujúci úryvok kódu ilustruje, ako môžete pridať filter do globálneho rozsahu. Všimnite si, ako sa vlastný filter akcií, ktorý sme implementovali vyššie, pridá do kolekcie filtrov v metóde ConfigureServices triedy Startup. Upozorňujeme, že filter je do kolekcie filtrov pridaný podľa inštancie.

services.AddMvc (možnosti =>

            {

options.Filters.Add (nový SimpleAsyncActionFilter ());

}). SetCompatibilityVersion (CompatibilityVersion.Version_2_1);

Filter môžete pridať aj podľa typu, ako je uvedené v útržku kódu nižšie.

services.AddMvc (možnosti =>

            {

options.Filters.Add (typeof (SimpleAsyncActionFilter));

}). SetCompatibilityVersion (CompatibilityVersion.Version_2_1);

Filtre umožňujú vykonať kód pred alebo za konkrétnym bodom v potrubí spracovania žiadosti. Jedným z veľkých nových vylepšení v akčných filtroch v ASP.NET Core MVC je schopnosť určiť poradie vykonania filtra v kanáli požiadaviek HTTP. Túto a mnoho ďalších funkcií filtrov v ASP.NET Core MVC preskúmame v nadchádzajúcom príspevku.