Ohjelmointi

Toimintasuodattimien käyttö ASP.NET Core MVC: ssä

ASP.NET Core MVC: n suodattimien avulla voimme suorittaa koodin ennen tai jälkeen pyynnön käsittelyn tietyn vaiheen. Eri tyyppiset suodattimet vastaavat putkilinjan eri vaiheita valtuutuksesta tuloksen suorittamiseen.

Voit esimerkiksi hyödyntää ASP.NET Core MVC: n toimintosuodattimia mukautetun koodin suorittamiseksi ennen toimintamenetelmän suorittamista ja sen jälkeen. Tässä artikkelissa käsitellään ASP.NET Core MVC: n sisäänrakennettuja suodattimia, miksi ne ovat hyödyllisiä ja miten voimme käyttää toimintosuodattimia ASP.NET Core -sovelluksissamme.

Suodattimet ASP.NET Core MVC: ssä

ASP.NET Core MVC sisältää monia sisäänrakennettuja suodattimia. Näitä ovat seuraavat:

  • Toimintasuodattimet. Nämä suoritetaan ennen ohjaimen toimintamenetelmän suorittamista ja sen jälkeen.
  • Valtuutussuodattimet. Nämä suodattimet suoritetaan pyyntöputken alussa. Niitä käytetään käyttäjän tunnistetietojen tarkistamiseen sen tarkistamiseksi, onko käyttäjällä lupa.
  • ResourceFilters. Nämä suodattimet suoritetaan valtuutuksen jälkeen ja ennen mallin sitomista. Voit hyödyntää ResourceFilters-palvelua välimuistin toteuttamiseksi.
  • Tulossuodattimet. Näitä suodattimia käytetään koodin suorittamiseen ennen toimintamenetelmän IActionResult-suoritusta ja sen jälkeen.
  • ExceptionFilters. Näitä suodattimia käytetään käsittelyssä mahdollisesti esiintyvien poikkeusten käsittelyyn. Voit hyödyntää ExceptionFilters-sovellusta suorittaaksesi mukautetun koodin, kun poikkeus on tapahtunut.

Käytettävän suodattimen tyypin valinta riippuu siitä, mitä yrität saavuttaa. Esimerkiksi, jos yrität oikosulkea pyyntöä (ts. Lopetat toimintatavan suorittamisen ja palautat tuloksen ennenaikaisesti), käytä resurssisuodatinta. Vaihtoehtoisesti, jos yrität muuttaa toimintamenetelmän parametreja ja toimintamenetelmästä palautettua tulosta, käytä toimintosuodatinta.

ActionFilterAttribute-luokka toteuttaa IActionFilter-, IAsyncActionFilter-, IResultFilter-, IAsyncResultFilter- ja IOrderedFilter-rajapinnat. Voit hyödyntää tätä luokkaa toteuttaaksesi menetelmän suodattimen, ohjaimen suodattimen tai yleisen suodattimen. Tarkastelemme tätä myöhemmin tässä artikkelissa.

Luo ASP.NET Core Web API -projekti Visual Studio 2017: ssä

Ensinnäkin, luodaan ASP.NET Core Web API -projekti Visual Studiossa. Jos Visual Studio 2017 on käytössä ja käynnissä järjestelmässäsi, luo ASP.NET Core MVC -projekti seuraavasti.

  1. Käynnistä Visual Studio 2017 IDE.
  2. Napsauta Tiedosto> Uusi> Projekti.
  3. Valitse "ASP.NET Core Web Application (.NET Core)" näytetystä mallipohjaluettelosta.
  4. Määritä projektille nimi.
  5. Tallenna projekti napsauttamalla OK.
  6. Uusi ikkuna, “New .NET Core Web Application…”, tulee näkyviin.
  7. Valitse .NET Core ajonaikaiseksi ja ASP.NET Core 2.1 (tai uudempi) ylhäältä avattavasta luettelosta.
  8. Valitse projektimalliksi ”Web-sovellus (Model-View-Controller)”.
  9. Varmista, että valintaruudut “Ota Docker-tuki käyttöön” ja “Määritä HTTPS: lle” on poistettu. Emme käytä näitä ominaisuuksia täällä.
  10. Varmista, että ”Ei todentamista” on valittu. Emme myöskään käytä todennusta täällä.

Tämä luo uuden ASP.NET Core MVC -projektin Visual Studioon. Käytämme tätä projektia toimintosuodattimien toteuttamiseen seuraavissa osioissa.

Luo mukautettu toimintosuodatin ASP.NET Core MVC: ssä

Voit hyödyntää mukautettuja toimintosuodattimia uudelleenkäytettävän koodin suorittamiseksi ennen toimintamenetelmän suorittamista tai sen jälkeen. Voit laajentaa seuraavia abstrakteja perusluokkia luomaan mukautettuja suodattimia. Huomaa, että jokainen näistä abstrakteista luokista laajentaa Attribute-luokkaa.

  • ActionFilterAttribute
  • ResultFilterAttribute
  • ExceptionFilterAttribute
  • ServiceFilterAttribute
  • TypeFilterAttribute

Voit myös laajentaa IActionFilter-käyttöliittymää ja toteuttaa sen menetelmät mukautetun suodattimen luomiseksi. Voit luoda sekä synkronisia että asynkronisia suodattimia.

Luo synkroninen toimintosuodatin ASP.NET Core MVC: hen

Seuraava koodinpätkä kuvaa, kuinka synkroninen toimintosuodatin voidaan luoda laajentamalla IActionFilter-käyttöliittymää ja toteuttamalla OnActionExecuting- ja OnActionExecuted-menetelmät.

public class SimpleActionFilter: IActionFilter

    {

public void OnActionExecuting (ActionExecutingContext-konteksti)

        {

// tämä menetelmä suoritetaan ennen toimintamenetelmän suorittamista

        }

public void OnActionExecuted (ActionExecutedContext-konteksti)

        {

// tämä menetelmä suoritetaan, kun toimintamenetelmä on suoritettu

        }

    }

Luo asynkroninen toimintosuodatin ASP.NET Core MVC: hen

Voit luoda asynkronisen toimintosuodattimen laajentamalla IAsyncActionFilter-käyttöliittymää ja ottamalla käyttöön OnActionExecutionAsync-menetelmän alla olevan koodinpätkän mukaisesti.

public class SimpleAsyncActionFilter: IAsyncActionFilter

    {

public async Task OnActionExecutionAsync (ActionExecutingContext-konteksti,

ActionExecutionDelegate seuraava)

        {

// tähän kirjoitettu koodi suoritetaan ennen toimintamenetelmän suorittamista

odota seuraavaksi ();

// tähän kirjoitettu koodi suoritetaan toimintamenetelmän suorittamisen jälkeen

        }

    }

Lisää toimintosuodatin ASP.NET Core -sovelluksen ConfigureServices-menetelmään

Voit lisätä suodattimia eri laajuuksilla. Näitä ovat toiminnan laajuus, ohjaimen laajuus ja globaali laajuus. Seuraava koodinpätkä kuvaa, kuinka voit lisätä suodattimen globaaliin laajuuteen. Huomaa, kuinka edellä käyttöön otettu mukautettu toimintosuodatin lisätään suodatinkokoelmaan Startup-luokan ConfigureServices-menetelmässä. Huomaa, että suodatin lisätään suodatinkokoelmaan ilmentymittäin.

services.AddMvc (vaihtoehdot =>

            {

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

SetCompatibilityVersion (CompatibilityVersion.Version_2_1);

Voit myös lisätä suodattimen tyypin mukaan alla olevan koodinpätkän mukaisesti.

services.AddMvc (vaihtoehdot =>

            {

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

SetCompatibilityVersion (CompatibilityVersion.Version_2_1);

Suodattimien avulla voit suorittaa koodin ennen tiettyä kohtaa pyynnön käsittelyssä. Yksi suurimmista uusista parannuksista toimintasuodattimissa ASP.NET Core MVC: ssä on kyky määrittää suodattimen suoritusjärjestys HTTP-kyselyputkessa. Tutkimme tätä ja monia muita suodattimien ominaisuuksia ASP.NET Core MVC: ssä tulevassa viestissä.