Programiranje

Kako uporabljati akcijske filtre v ASP.NET Core MVC

Filtri v ASP.NET Core MVC nam omogočajo izvajanje kode pred ali po določenih stopnjah cevovoda za obdelavo zahtev. Različne vrste filtrov ustrezajo različnim stopnjam cevovoda, od avtorizacije do izvedbe rezultata.

Na primer, v ASP.NET Core MVC lahko izkoristite filtre dejanj za izvajanje kode po meri pred in po izvedbi dejanja. Ta članek predstavlja razpravo o vgrajenih filtrih v ASP.NET Core MVC, zakaj so uporabni in kako lahko uporabimo akcijske filtre v naših aplikacijah ASP.NET Core.

Filtri v ASP.NET Core MVC

ASP.NET Core MVC vsebuje veliko vgrajenih filtrov. Sem spadajo naslednje:

  • ActionFilters. Izvedejo se pred in po izvedbi akcijske metode krmilnika.
  • Avtorizacijski filtri. Ti filtri se izvedejo na začetku cevovoda zahtevka. Uporabljajo se za preverjanje uporabniških poverilnic za preverjanje, ali je uporabnik pooblaščen.
  • ResourceFilters. Ti filtri se izvedejo po odobritvi in ​​preden pride do vezave modela. Za izvajanje predpomnjenja lahko izkoristite ResourceFilters.
  • ResultFilters. Ti filtri se uporabljajo za izvajanje kode pred in po izvedbi IActionResult metode.
  • IzjemaFiltri. Ti filtri se uporabljajo za obravnavo kakršnih koli izjem, ki se pojavijo v cevovodu. ExceptionFilters lahko izkoristite za izvajanje kode po meri, ko pride do izjeme.

Izbira vrste filtra za uporabo je odvisna od tega, kaj želite doseči. Na primer, če poskušate zahtevo poslati v kratki stik (tj. Ustaviti izvajanje akcijske metode in prezgodaj vrniti rezultat), uporabite filter virov. Če poskušate spremeniti parametre metode dejanja in rezultat, vrnjen iz metode dejanja, uporabite filter dejanj.

Razred ActionFilterAttribute izvaja vmesnike IActionFilter, IAsyncActionFilter, IResultFilter, IAsyncResultFilter in IOrderedFilter. Ta razred lahko izkoristite za izvedbo filtra metode, filtra krmilnika ali globalnega filtra. To bomo preučili kasneje v tem članku.

Ustvarite projekt spletnega API-ja ASP.NET Core v Visual Studio 2017

Najprej ustvarimo projekt ASP.NET Core Web API v Visual Studio. Če Visual Studio 2017 deluje in deluje v vašem sistemu, sledite spodnjim korakom, da ustvarite projekt ASP.NET Core MVC.

  1. Zaženite Visual Studio 2017 IDE.
  2. Kliknite Datoteka> Novo> Projekt.
  3. Na prikazanem seznamu predlog izberite »Spletna aplikacija ASP.NET Core (.NET Core)«.
  4. Navedite ime projekta.
  5. Kliknite V redu, da shranite projekt.
  6. Odprlo se bo novo okno »Nova spletna aplikacija .NET Core…«.
  7. Na spustnem seznamu na vrhu izberite .NET Core kot izvajalno okolje in ASP.NET Core 2.1 (ali novejšo).
  8. Kot predlogo projekta izberite »Spletna aplikacija (Model-View-Controller)«.
  9. Prepričajte se, da potrditvena polja »Omogoči podporo za Docker« in »Konfiguriranje za HTTPS« nista potrjeni. Tu ne bomo uporabljali teh funkcij.
  10. Prepričajte se, da je izbrana možnost »No Authentication«. Tudi tu ne bomo uporabljali preverjanja pristnosti.

To bo ustvarilo nov projekt ASP.NET Core MVC v Visual Studio. Ta projekt bomo uporabili za izvajanje naših filtrov ukrepov v naslednjih oddelkih.

Ustvarite filter dejanj po meri v ASP.NET Core MVC

Filtri dejanj po meri lahko izkoristite za izvajanje kode za večkratno uporabo pred ali po izvedbi dejanja. Naslednje abstraktne osnovne razrede lahko razširite, da ustvarite filtre po meri. Upoštevajte, da vsak od teh abstraktnih razredov razširja razred Atribut.

  • ActionFilterAttribute
  • ResultFilterAttribute
  • ExceptionFilterAttribute
  • ServiceFilterAttribute
  • TypeFilterAttribute

Lahko tudi razširite vmesnik IActionFilter in uporabite njegove metode za ustvarjanje filtra po meri. Ustvarite lahko sinhrone in asinhrone filtre.

Ustvarite filter sinhronega dejanja v ASP.NET Core MVC

Naslednji delček kode prikazuje, kako je mogoče ustvariti sinhroni akcijski filter z razširitvijo vmesnika IActionFilter in izvajanjem metod OnActionExecuting in OnActionExecuted.

javni razred SimpleActionFilter: IActionFilter

    {

javna void OnActionExecuting (kontekst ActionExecutingContext)

        {

// ta metoda bo izvedena pred izvajanjem akcijske metode

        }

javna void OnActionExecuted (kontekst ActionExecutedContext)

        {

// ta metoda se bo izvedla po izvedbi akcijske metode

        }

    }

Ustvarite asinhroni akcijski filter v ASP.NET Core MVC

Če želite ustvariti asinhroni akcijski filter, lahko razširite vmesnik IAsyncActionFilter in uporabite metodo OnActionExecutionAsync, kot je prikazano v spodnjem delčku kode.

javni razred SimpleAsyncActionFilter: IAsyncActionFilter

    {

javno asinh. opravilo OnActionExecutionAsync (kontekst ActionExecutingContext,

ActionExecutionDelegate next)

        {

// tu napisana koda bo izvedena pred izvajanjem akcijske metode

počakajte na naslednji ();

// tu napisana koda se izvede po izvedbi akcijske metode

        }

    }

Dodajte filter dejanj v metodo ConfigureServices v ASP.NET Core

Dodate lahko filtre na različnih ravneh. Ti vključujejo obseg dejanj, obseg krmilnika in globalni obseg. Naslednji delček kode prikazuje, kako lahko dodate filter v globalno področje. Upoštevajte, kako je filter dejanj po meri, ki smo ga implementirali zgoraj, dodan zbirki filtrov v metodi ConfigureServices razreda Startup. Upoštevajte, da je filter zbirki filtrov dodan po primerku.

storitve.AddMvc (možnosti =>

            {

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

}). SetCompatibilityVersion (CompatibilityVersion.Version_2_1);

Filter lahko dodate tudi po vrsti, kot je prikazano v spodnjem delčku kode.

storitve.AddMvc (možnosti =>

            {

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

}). SetCompatibilityVersion (CompatibilityVersion.Version_2_1);

Filtri omogočajo izvajanje kode pred ali po določeni točki v cevovodu za obdelavo zahtev. Ena največjih novih izboljšav filtrov za delovanje v ASP.NET Core MVC je zmožnost določanja vrstnega reda izvajanja filtra v cevovodu zahtev HTTP. To in številne druge funkcije filtrov v ASP.NET Core MVC bomo preučili v prihodnjem prispevku.

$config[zx-auto] not found$config[zx-overlay] not found