Programmering

Sådan bruges handlingsfiltre i ASP.NET Core MVC

Filtre i ASP.NET Core MVC giver os mulighed for at udføre kode før eller efter specifikke trin i anmodningen om behandlingsrørledning. De forskellige typer filtre svarer til de forskellige faser i rørledningen, fra autorisation til udførelse af resultater.

For eksempel kan du udnytte handlingsfiltre i ASP.NET Core MVC til at udføre brugerdefineret kode før og efter udførelsen af ​​en handlingsmetode. Denne artikel præsenterer en diskussion af de indbyggede filtre i ASP.NET Core MVC, hvorfor de er nyttige, og hvordan vi kan bruge handlingsfiltre i vores ASP.NET Core-applikationer.

Filtre i ASP.NET Core MVC

ASP.NET Core MVC indeholder mange indbyggede filtre. Disse inkluderer følgende:

  • ActionFilters. Disse udføres før og efter udførelse af en handlingsmetode for en controller.
  • AuthorizationFilters. Disse filtre udføres i begyndelsen af ​​anmodningens pipeline. De bruges til at validere en brugers legitimationsoplysninger for at kontrollere, om brugeren er autoriseret.
  • ResourceFilters. Disse filtre udføres efter godkendelse, og inden modelbinding finder sted. Du kan drage fordel af ResourceFilters til at implementere caching.
  • ResultatFiltre. Disse filtre bruges til at udføre kode før og efter en handlingsmetodes IActionResult er udført.
  • ExceptionFilters. Disse filtre bruges til at håndtere alle undtagelser, der opstår i rørledningen. Du kan drage fordel af ExceptionFilters til at udføre brugerdefineret kode, når en undtagelse er sket.

Valget af den type filter, der skal bruges, afhænger af, hvad du prøver at opnå. Som et eksempel, hvis du forsøger at kortslutte en anmodning (dvs. stoppe en handlingsmetode fra at udføre og returnere et resultat for tidligt), vil du bruge et ressourcefilter. Alternativt, hvis du forsøger at ændre parametre for handlingsmetoden og resultatet returneres fra handlingsmetoden, bruger du et handlingsfilter.

ActionFilterAttribute-klassen implementerer grænsefladerne IActionFilter, IAsyncActionFilter, IResultFilter, IAsyncResultFilter og IOrderedFilter. Du kan drage fordel af denne klasse til at implementere et metodefilter, controllerfilter eller globalt filter. Vi vil undersøge dette senere i denne artikel.

Opret et ASP.NET Core Web API-projekt i Visual Studio 2017

Lad os først oprette et ASP.NET Core Web API-projekt i Visual Studio. Hvis Visual Studio 2017 er i gang i dit system, skal du følge nedenstående trin for at oprette et ASP.NET Core MVC-projekt.

  1. Start Visual Studio 2017 IDE.
  2. Klik på Filer> Ny> Projekt.
  3. Vælg "ASP.NET Core Web Application (.NET Core)" fra listen over skabeloner, der vises.
  4. Angiv et navn til projektet.
  5. Klik på OK for at gemme projektet.
  6. Et nyt vindue, "New .NET Core Web Application ...", vises.
  7. Vælg .NET Core som runtime og ASP.NET Core 2.1 (eller nyere) fra rullelisten øverst.
  8. Vælg "Webapplikation (Model-View-Controller)" som projektskabelon.
  9. Sørg for, at afkrydsningsfelterne "Enable Docker Support" og "Configure for HTTPS" ikke er markeret. Vi bruger ikke disse funktioner her.
  10. Sørg for, at "Ingen godkendelse" er valgt. Vi bruger heller ikke godkendelse her.

Dette vil skabe et nyt ASP.NET Core MVC-projekt i Visual Studio. Vi bruger dette projekt til at implementere vores handlingsfiltre i de efterfølgende afsnit.

Opret et tilpasset handlingsfilter i ASP.NET Core MVC

Du kan drage fordel af brugerdefinerede handlingsfiltre til at udføre genanvendelig kode før eller efter udførelsen af ​​en handlingsmetode. Du kan udvide følgende abstrakte baseklasser for at oprette brugerdefinerede filtre. Bemærk, at hver af disse abstrakte klasser udvider attributklassen.

  • ActionFilterAttribute
  • ResultatFilterAttribute
  • ExceptionFilterAttribute
  • ServiceFilterAttribute
  • TypeFilterAttribute

Du kan også udvide IActionFilter-grænsefladen og implementere dens metoder til at oprette et brugerdefineret filter. Du kan oprette både synkrone og asynkrone filtre.

Opret et synkront handlingsfilter i ASP.NET Core MVC

Følgende kodestykke illustrerer, hvordan et synkront handlingsfilter kan oprettes ved at udvide IActionFilter-grænsefladen og implementere metoderne OnActionExecuting og OnActionExecuted.

offentlig klasse SimpleActionFilter: IActionFilter

    {

offentlig ugyldighed OnActionExecuting (ActionExecutingContext context)

        {

// denne metode udføres før udførelse af en handlingsmetode

        }

offentlig ugyldighed OnActionExecuted (ActionExecutedContext context)

        {

// denne metode udføres, når en handlingsmetode er udført

        }

    }

Opret et asynkront handlingsfilter i ASP.NET Core MVC

For at oprette et asynkront handlingsfilter kan du udvide IAsyncActionFilter-grænsefladen og implementere OnActionExecutionAsync-metoden som vist i kodestykket nedenfor.

offentlig klasse SimpleAsyncActionFilter: IAsyncActionFilter

    {

offentlig asynk Task OnActionExecutionAsync (ActionExecutingContext context,

ActionExecutionDelegate next)

        {

// kode skrevet her udføres før udførelse af en handlingsmetode

afvente næste ();

// kode skrevet her udføres efter udførelse af en handlingsmetode

        }

    }

Tilføj et handlingsfilter i metoden ConfigureServices i ASP.NET Core

Du kan tilføje filtre på forskellige niveauer. Disse inkluderer handlingsomfang, controlleromfang og globalt omfang. Følgende kodestykke illustrerer, hvordan du kan tilføje et filter i det globale omfang. Bemærk, hvordan det brugerdefinerede handlingsfilter, vi implementerede ovenfor, føjes til filtersamlingen i ConfigureServices-metoden i startklassen. Bemærk, at filteret føjes til filtersamlingen efter instans.

services.AddMvc (optioner =>

            {

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

SetCompatibilityVersion (CompatibilityVersion.Version_2_1);

Du kan også tilføje filteret efter type som vist i kodestykket nedenfor.

services.AddMvc (optioner =>

            {

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

SetCompatibilityVersion (CompatibilityVersion.Version_2_1);

Filtre giver dig mulighed for at udføre kode før eller efter et bestemt punkt i anmodningen om behandlingsrørledning. En af de store nye forbedringer i handlingsfiltre i ASP.NET Core MVC er evnen til at specificere eksekveringsrækkefølgen for filteret i HTTP-anmodningens pipeline. Vi vil undersøge dette og mange flere funktioner i filtre i ASP.NET Core MVC i et kommende indlæg.

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