Kako stvoriti ograničenja rute u ASP.NET Core

Ograničenja rute u ASP.NET Core koriste se za filtriranje ili ograničavanje neželjenih podataka u pristupu radnjama vašeg kontrolera. Za početni vodič o usmjeravanju u ASP.NET Core, možete se pozvati na moj prethodni članak o usmjeravanju temeljenom na atributima nasuprot usmjeravanju na temelju konvencija u ASP.NET Core. Ovaj članak nadilazi osnove za istraživanje naprednih operacija pomoću ograničenja rute.

Da biste radili s primjerima koda iz ovog članka, u sustavu biste trebali instalirati Visual Studio 2019. Ako još nemate kopiju, ovdje možete preuzeti Visual Studio 2019. 

Stvorite ASP.NET Core MVC projekt u Visual Studio 2019

Prvo stvorimo projekt ASP.Net Core u Visual Studio 2019. Pod pretpostavkom da je Visual Studio 2019 instaliran u vašem sustavu, slijedite korake opisane u nastavku da biste stvorili novi ASP.Net Core projekt u Visual Studio.

  1. Pokrenite Visual Studio IDE.
  2. Kliknite "Stvori novi projekt".
  3. U prozoru "Stvori novi projekt" s popisa predložaka odaberite "ASP.NET Core Web Application".
  4. Kliknite Dalje.
  5. U prozoru „Konfiguriranje novog projekta“ navedite naziv i mjesto za novi projekt.
  6. Po želji potvrdite okvir "Smjesti rješenje i projekt u isti direktorij", ovisno o vašim željama.
  7. Kliknite Stvori.
  8. U sljedećem prozoru "Stvaranje nove web-aplikacije ASP.NET Core" odaberite .NET Core kao vrijeme izvođenja i ASP.NET Core 3.1 (ili noviju) s padajućeg popisa na vrhu.
  9. Odaberite „Web aplikacija (Model-View-Controller)“ kao predložak projekta za stvaranje nove ASP.NET Core MVC aplikacije. 
  10. Obavezno označite potvrdne okvire "Omogući podršku za Docker" i "Konfiguriraj za HTTPS" jer ovdje nećemo koristiti te značajke.
  11. Provjerite je li provjera autentičnosti postavljena na "Bez provjere autentičnosti" jer ni mi nećemo koristiti provjeru autentičnosti.
  12. Kliknite Stvori.

Slijedeći ove korake stvorit će se novi ASP.NET Core MVC projekt u Visual Studio 2019. Ovaj ćemo projekt koristiti u odjeljcima u nastavku kako bismo ilustrirali kako možemo koristiti ograničenja rute u ASP.NET Core 3.1.

Klasa RouteCollection u ASP.NET Core

Klasa RouteTable u ASP.NET Core sadrži svojstvo pod nazivom Routes koje pohranjuje sve rute kao RouteCollection. Klasa RouteCollection sadrži neke metode proširenja koje se mogu koristiti za mapiranje ruta ili njihovo zanemarivanje.

MapRoute je preopterećena metoda koja prihvaća ograničenja kao parametar. To možete koristiti za prenošenje ograničenja na rutu. Slijedi deklaracija metode MapRoute.

javna statička Route MapRoute (ovo RouteCollection rute, naziv niza,

    string URL, zadane vrijednosti objekta, ograničenja objekta);

Sučelje IRouteConstraint u ASP.NET Core

Sučelje IRouteConstraint ugovor je koji sadrži deklaraciju samo jedne metode nazvane Match. Ovo sučelje mora proširiti klasa i u njemu implementirana metoda Match kako bi se provjerilo vrijedi li određeni parametar URL-a za ograničenje. Evo kako je definirano sučelje IRouteConstraint:

prostor imena Microsoft.AspNetCore.Routing

{

    javno sučelje IRouteConstraint

    {

        bool Match (

            HttpContext httpContext,

            I vanjska ruta,

            string routeKey,

            Vrijednosti RouteValueDictionary,

            RouteDirection routeDirection);

    }

}

Rječnik ConstraintMap u ASP.NET Core

ConstraintMap je rječnik koji sadrži popis ograničenja rute koji preslikava tipke ograničenja rute na implementacije IRouteConstraint. Isječak koda dan u nastavku ilustrira kako možete dodati svoja prilagođena ograničenja u ovaj rječnik.

javna praznina ConfigureServices (usluge IServiceCollection) 

{  

  usluge.Configure (routeOptions =>  

  { 

     routeOptions.ConstraintMap.Add ("emailconstraint", typeof (EmailRouteContraint)); 

  }); 

Primijenite metodu IRouteConstraint Match u ASP.NET Core

Da biste kreirali prilagođeno ograničenje rute, trebali biste stvoriti klasu koja proširuje sučelje IRouteConstraint i implementira njegovu metodu Match. Ograničenje se može koristiti za sprječavanje neželjenih dolaznih zahtjeva i sprječavanje podudaranja rute ako nije zadovoljen određeni uvjet. Na primjer, možda biste trebali osigurati da parametar prosljeđen metodi radnje uvijek bude cijeli broj.

Metoda podudaranja prihvaća sljedeće parametre:

  • HttpContext - obuhvaća sve HTTP specifične informacije o zahtjevu
  • IRouter - predstavlja usmjerivač koji će primijeniti ograničenja
  • RouteKey - predstavlja parametar rute koji se provjerava
  • RouteDirection - nabrajanje koje sadrži dvije vrijednosti, naime IncomingRequest i UrlGeneration, i koristi se za naznačavanje obrađuje li se URL iz HTTP zahtjeva ili generira URL
  • RouteValues ​​- sadrži parametre URL-a

Struktura prilagođenog ograničenja rute u ASP.NET Core

Evo primjera strukture prilagođenog ograničenja rute:

javna klasa CustomRouteConstraint: IRouteConstraint

    {

        javni bool Match (HttpContext httpContext, IRouter route,

        niz routeKey, vrijednosti RouteValueDictionary,

        RouteDirection routeDirection)

        {

            baciti novi NotImplementedException ();

        }

    }

Primjer prilagođenog ograničenja rute u ASP.NET Core

Primijenimo sada prilagođeno ograničenje rute koje može provjeriti ID-ove e-pošte. Prvo stvorite klasu koja proširuje sučelje IRouteConstraint i implementira metodu Match. Sljedeći isječak koda prikazuje prilagođenu klasu ograničenja rute pod nazivom EmailRouteContraint koja proširuje sučelje IRouteConstraint.

javna klasa EmailRouteContraint: IRouteConstraint

    {

        javni bool Match (HttpContext httpContext, IRouter route,

        niz routeKey, vrijednosti RouteValueDictionary,

        RouteDirection routeDirection)

        {

            povratak istinit;

        }

    }

Sljedeći popis kodova prikazuje klasu EmailRouteConstraint s implementiranom metodom Match.

javna klasa EmailRouteContraint: IRouteConstraint

    {

        javni bool Match (HttpContext httpContext, IRouter route,

        niz routeKey, vrijednosti RouteValueDictionary,

        RouteDirection routeDirection)

        {

            if (values.TryGetValue (routeKey, out var routeValue))

            {

                var parameterValueString = Convert.ToString (routeValue,

                CultureInfo.InvariantCulture);

                return IsEmailAddressValid (parameterValueString);

            }

            return false;

        }

        privatni bool IsEmailAddressValid (string emailAddress)

        {

            povratak istinit;

        }

    }

Primijetite da metoda IsEmailAddressValid ovdje jednostavno vraća "true". Ostavljam vama da napišete potreban kod za potvrdu adrese e-pošte.

Registrirajte prilagođeno ograničenje rute u ASP.NET Core

Trebali biste registrirati svoje prilagođeno ograničenje rute sa sustavom usmjeravanja u metodi ConfigureServices klase Startup. Sljedeći isječak koda to ilustrira. 

javna praznina ConfigureServices (usluge IServiceCollection)

      {

          services.AddControllersWithViews ();

          usluge.Configure (routeOptions =>

          {

              routeOptions.ConstraintMap.Add ("ERC",

              typeof (EmailRouteContraint));

          });

      }

Također biste trebali konfigurirati svoje prilagođeno ograničenje rute u metodi Konfiguriranje klase Startup, kao što je prikazano u isječku koda u nastavku.

app.UseEndpoints (krajnje točke =>

{

     krajnje točke.MapControllerRoute (

         ime: "zadani",

         ograničenja: novo {ERC = novo EmailRouteContraint ()},

         obrazac: "{kontroler = Početna} / {akcija = Indeks} / {id?}");

});

I to je to. Sada možete odrediti ograničenje u svom kontroleru ili u svojim akcijskim metodama i početi koristiti aplikaciju.

Čas izvođenja ASP.NET Core provjerava valjanost ako se definirani obrazac i ograničenja rute podudaraju s uzorkom i vrijednostima dolaznog zahtjeva. Logika provjere valjanosti ograničenja definirana je unutar metode Match vašeg prilagođenog ograničenja rute. Možete iskoristiti ograničenja kako biste izbjegli nepotrebne zahtjeve, kao i da biste provjerili vrijednosti rute prije nego što se zahtjev proslijedi na akcijsku metodu.

Kako učiniti više u ASP.NET Coreu:

  • Kako upravljati tajnama korisnika u ASP.NET Coreu
  • Kako izraditi gRPC aplikacije u ASP.NET Core
  • Kako preusmjeriti zahtjev u ASP.NET Core
  • Kako se koristi usmjeravanje atributa u ASP.NET Core
  • Kako proslijediti parametre metodama akcije u ASP.NET Core MVC
  • Kako koristiti API analizatore u ASP.NET Coreu
  • Kako koristiti tokene podataka rute u ASP.NET Core
  • Kako koristiti API izradu verzija u ASP.NET Coreu
  • Kako koristiti objekte za prijenos podataka u ASP.NET Core 3.1
  • Kako postupati s pogreškama 404 u ASP.NET Core MVC
  • Kako se koristi injekcija ovisnosti u akcijskim filtrima u ASP.NET Core 3.1
  • Kako se koristi obrazac opcija u ASP.NET Core
  • Kako se koristi usmjeravanje krajnje točke u ASP.NET Core 3.0 MVC
  • Kako izvesti podatke u Excel u ASP.NET Core 3.0
  • Kako koristiti LoggerMessage u ASP.NET Core 3.0
  • Kako poslati e-poštu u ASP.NET Core
  • Kako prijaviti podatke na SQL Server u ASP.NET Core
  • Kako rasporediti poslove pomoću Quartz.NET-a u ASP.NET Core
  • Kako vratiti podatke s ASP.NET Core Web API-ja
  • Kako oblikovati podatke o odgovoru u ASP.NET Core
  • Kako konzumirati ASP.NET Core Web API pomoću RestSharp
  • Kako izvesti asinkrne operacije pomoću Dappera
  • Kako koristiti zastavice značajki u ASP.NET Coreu
  • Kako koristiti atribut FromServices u ASP.NET Core
  • Kako raditi s kolačićima u ASP.NET Coreu
  • Kako raditi sa statičkim datotekama u ASP.NET Coreu
  • Kako koristiti URL za prepisivanje Middlewarea u ASP.NET Core
  • Kako implementirati ograničenje brzine u ASP.NET Core
  • Kako koristiti Azure Application Insights u ASP.NET Core
  • Korištenje naprednih značajki NLog u ASP.NET Core
  • Kako postupati s pogreškama u ASP.NET web API-ju
  • Kako implementirati globalno rukovanje iznimkama u ASP.NET Core MVC
  • Kako postupati s null vrijednostima u ASP.NET Core MVC
  • Napredna verzija u ASP.NET Core Web API
  • Kako raditi s uslugama za radnike u ASP.NET Coreu
  • Kako koristiti API zaštite podataka u ASP.NET Core
  • Kako se koristi uvjetni međuprodukt u ASP.NET Coreu
  • Kako raditi sa stanjem sesije u ASP.NET Coreu
  • Kako napisati učinkovite kontrolere u ASP.NET Core