Programmering

Hvordan bruke handlingsfiltre i ASP.NET Core MVC

Filtre i ASP.NET Core MVC tillater oss å utføre kode før eller etter bestemte stadier av forespørselsrørledningen. De forskjellige typene filtre samsvarer med de forskjellige trinnene i rørledningen, fra autorisasjon til resultatutførelse.

For eksempel kan du utnytte handlingsfiltre i ASP.NET Core MVC for å utføre tilpasset kode før og etter utførelsen av en handlingsmetode. Denne artikkelen presenterer en diskusjon om de innebygde filtrene i ASP.NET Core MVC, hvorfor de er nyttige, og hvordan vi kan bruke handlingsfiltre i ASP.NET Core-applikasjonene.

Filtre i ASP.NET Core MVC

ASP.NET Core MVC inneholder mange innebygde filtre. Disse inkluderer følgende:

  • ActionFilters. Disse utføres før og etter utførelse av en handlingsmetode til en kontroller.
  • AuthorizationFilters. Disse filtrene kjøres i begynnelsen av forespørselsrørledningen. De brukes til å validere brukerens legitimasjon for å sjekke om brukeren er autorisert.
  • ResourceFilters. Disse filtrene kjøres etter autorisasjon og før modellinnbinding skjer. Du kan dra nytte av ResourceFilters for å implementere caching.
  • ResultatFilter. Disse filtrene brukes til å utføre kode før og etter at en handlingsmetodes IActionResult er utført.
  • ExceptionFilters. Disse filtrene brukes til å håndtere unntak som oppstår i rørledningen. Du kan dra nytte av ExceptionFilters for å utføre tilpasset kode når et unntak har oppstått.

Valget av filtertype du vil bruke, avhenger av hva du prøver å oppnå. Som et eksempel, hvis du prøver å kortslutte en forespørsel (dvs. stoppe en handlingsmetode fra å utføre og returnere et resultat for tidlig), vil du bruke et ressursfilter. Alternativt, hvis du prøver å endre parametere for handlingsmetoden og resultatet returnert fra handlingsmetoden, vil du bruke et handlingsfilter.

ActionFilterAttribute-klassen implementerer grensesnittene IActionFilter, IAsyncActionFilter, IResultFilter, IAsyncResultFilter og IOrderedFilter. Du kan dra nytte av denne klassen for å implementere et metodefilter, kontrollerfilter eller globalt filter. Vi vil undersøke dette senere i denne artikkelen.

Opprett et ASP.NET Core Web API-prosjekt i Visual Studio 2017

Først og fremst, la oss lage et ASP.NET Core Web API-prosjekt i Visual Studio. Hvis Visual Studio 2017 er i gang i systemet ditt, følger du trinnene nedenfor for å opprette et ASP.NET Core MVC-prosjekt.

  1. Start Visual Studio 2017 IDE.
  2. Klikk på Fil> Ny> Prosjekt.
  3. Velg “ASP.NET Core Web Application (.NET Core)” fra listen over maler som vises.
  4. Spesifiser et navn på prosjektet.
  5. Klikk OK for å lagre prosjektet.
  6. Et nytt vindu, "New .NET Core Web Application ...", vises.
  7. Velg .NET Core som kjøretid og ASP.NET Core 2.1 (eller nyere) fra rullegardinlisten øverst.
  8. Velg "Web Application (Model-View-Controller)" som prosjektmal.
  9. Forsikre deg om at avmerkingsboksene "Aktiver Docker-støtte" og "Konfigurer for HTTPS" ikke er merket av. Vi bruker ikke disse funksjonene her.
  10. Forsikre deg om at “Ingen godkjenning” er valgt. Vi bruker ikke autentisering her heller.

Dette vil skape et nytt ASP.NET Core MVC-prosjekt i Visual Studio. Vi bruker dette prosjektet til å implementere handlingsfiltrene i avsnittene som følger.

Opprett et tilpasset handlingsfilter i ASP.NET Core MVC

Du kan dra nytte av egendefinerte handlingsfiltre for å utføre gjenbrukbar kode før eller etter kjøring av en handlingsmetode. Du kan utvide følgende abstrakte baseklasser for å lage tilpassede filtre. Merk at hver av disse abstrakte klassene utvider attributtklassen.

  • ActionFilterAttribute
  • ResultatFilterAttribute
  • ExceptionFilterAttribute
  • ServiceFilterAttribute
  • TypeFilterAttribute

Du kan også utvide IActionFilter-grensesnittet og implementere metodene for å lage et tilpasset filter. Du kan opprette både synkrone og asynkrone filtre.

Opprett et synkront handlingsfilter i ASP.NET Core MVC

Følgende kodebit illustrerer hvordan et synkront handlingsfilter kan opprettes ved å utvide IActionFilter-grensesnittet og implementere metodene OnActionExecuting og OnActionExecuted.

offentlig klasse SimpleActionFilter: IActionFilter

    {

offentlig ugyldig OnActionExecuting (ActionExecutingContext context)

        {

// denne metoden vil bli utført før kjøring av en handlingsmetode

        }

offentlig ugyldig OnActionExecuted (ActionExecutedContext context)

        {

// denne metoden blir utført etter at en handlingsmetode er utført

        }

    }

Opprett et asynkront handlingsfilter i ASP.NET Core MVC

For å opprette et asynkront handlingsfilter kan du utvide IAsyncActionFilter-grensesnittet og implementere OnActionExecutionAsync-metoden som vist i kodebiten nedenfor.

offentlig klasse SimpleAsyncActionFilter: IAsyncActionFilter

    {

public async Task OnActionExecutionAsync (ActionExecutingContext context,

ActionExecutionDelegate neste)

        {

// kode skrevet her vil bli utført før utførelse av en handlingsmetode

avvente neste ();

// kode skrevet her vil bli utført etter kjøring av en handlingsmetode

        }

    }

Legg til et handlingsfilter i ConfigureServices-metoden i ASP.NET Core

Du kan legge til filtre på forskjellige nivåer av omfang. Disse inkluderer handlingsomfang, kontrolleromfang og globalt omfang. Følgende kodebit illustrerer hvordan du kan legge til et filter i det globale omfanget. Legg merke til hvordan det tilpassede handlingsfilteret vi implementerte ovenfor blir lagt til filtersamlingen i ConfigureServices-metoden i oppstartklassen. Merk at filteret legges til filtersamlingen etter forekomst.

services.AddMvc (alternativer =>

            {

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

SetCompatibilityVersion (CompatibilityVersion.Version_2_1);

Du kan også legge til filteret etter type som vist i kodebiten nedenfor.

services.AddMvc (alternativer =>

            {

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

SetCompatibilityVersion (CompatibilityVersion.Version_2_1);

Filtre lar deg utføre kode før eller etter et bestemt punkt i forespørselsrørledningen. En av de store nye forbedringene i handlingsfiltre i ASP.NET Core MVC er muligheten til å spesifisere kjøringsrekkefølgen for filteret i HTTP-forespørselsrørledningen. Vi vil undersøke dette og mange flere funksjoner i filtre i ASP.NET Core MVC i et kommende innlegg.

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