Programiranje

Kako ustvariti omejitve poti v ASP.NET Core

Omejitve poti v ASP.NET Core se uporabljajo za filtriranje ali omejevanje neželenih podatkov pri doseganju dejanj krmilnika. Za primer o usmerjanju v ASP.NET Core si lahko ogledate moj prejšnji članek o usmerjanju na podlagi atributov v primerjavi s usmerjanjem na konvencijah v ASP.NET Core. Ta članek presega osnove raziskovanja naprednih operacij z uporabo omejitev poti.

Če želite delati s primeri kod v tem članku, morate imeti v sistemu nameščen Visual Studio 2019. Če kopije še nimate, lahko Visual Studio 2019 prenesete tukaj.

Ustvarite projekt ASP.NET Core MVC v Visual Studio 2019

Najprej ustvarimo projekt ASP.Net Core v Visual Studio 2019. Če predpostavimo, da je Visual Studio 2019 nameščen v vašem sistemu, sledite spodnjim korakom, da ustvarite nov projekt ASP.Net Core v Visual Studio.

  1. Zaženite Visual Studio IDE.
  2. Kliknite »Ustvari nov projekt«.
  3. V oknu »Ustvari nov projekt« na prikazanih seznamih predlog izberite »Spletna aplikacija ASP.NET Core«.
  4. Kliknite Naprej.
  5. V oknu »Konfiguriranje novega projekta« določite ime in mesto novega projekta.
  6. Izbirno potrdite polje »Rešitev in projekt postavite v isti imenik«, odvisno od vaših želja.
  7. Kliknite Ustvari.
  8. V naslednjem oknu »Ustvari novo spletno aplikacijo ASP.NET Core« izberite .NET Core kot izvajalno okolje in ASP.NET Core 3.1 (ali novejšo) s spustnega seznama na vrhu.
  9. Kot predlogo projekta izberite »Spletna aplikacija (Model-View-Controller)«, da ustvarite novo aplikacijo ASP.NET Core MVC.
  10. Prepričajte se, da sta potrditveni polji »Omogoči podporo za Docker« in »Konfiguriranje za HTTPS« odstranjeni, saj tukaj ne bomo uporabljali teh funkcij.
  11. Prepričajte se, da je preverjanje pristnosti nastavljeno na »Brez preverjanja pristnosti«, saj tudi preverjanja pristnosti ne bomo uporabljali.
  12. Kliknite Ustvari.

Po teh korakih boste ustvarili nov projekt ASP.NET Core MVC v Visual Studio 2019. Ta projekt bomo uporabili v spodnjih odsekih, da ponazorimo, kako lahko uporabimo omejitve poti v ASP.NET Core 3.1.

Razred RouteCollection v ASP.NET Core

Razred RouteTable v ASP.NET Core vsebuje lastnost z imenom Routes, ki vse poti shrani kot RouteCollection. Razred RouteCollection vsebuje nekatere metode razširitve, ki jih lahko uporabimo za preslikavo poti ali njihovo prezrtje.

MapRoute je preobremenjena metoda, ki kot parameter sprejme omejitve. To lahko uporabite za prenos omejitve na pot. Sledi izjava metode MapRoute.

javna statična Route MapRoute (ta RouteCollection poti, ime niza,

niz URL-jev, privzete vrednosti objekta, omejitve objektov);

Vmesnik IRouteConstraint v ASP.NET Core

Vmesnik IRouteConstraint je pogodba, ki vsebuje izjavo samo ene metode z imenom Match. Ta vmesnik mora razširiti razred in v njem implementirana metoda Match, da se preveri, ali določen parameter URL-ja velja za omejitev. Evo, kako je definiran vmesnik IRouteConstraint:

imenski prostor Microsoft.AspNetCore.Routing

{

javni vmesnik IRouteConstraint

    {

bool Match (

HttpContext httpContext,

Zunanja pot,

string routeKey,

Vrednosti RouteValueDictionary,

RouteDirection routeDirection);

    }

}

Slovar ConstraintMap v ASP.NET Core

ConstraintMap je slovar, ki vsebuje seznam omejitev poti, ki preslika tipke omejitve poti na izvedbe IRouteConstraint. Spodnji delček kode prikazuje, kako lahko v ta slovar dodate svoje omejitve po meri.

public void ConfigureServices (storitve IServiceCollection)

{  

storitve.Configure (routeOptions =>

  { 

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

  }); 

Implementirajte metodo IRouteConstraint Match v ASP.NET Core

Če želite ustvariti omejitev poti po meri, morate ustvariti razred, ki razširja vmesnik IRouteConstraint in izvaja njegovo metodo Match. Omejitev je mogoče uporabiti za preprečevanje neželenih dohodnih zahtev in preprečevanje ujemanja poti, razen če je izpolnjen določen pogoj. Na primer, morda boste želeli zagotoviti, da je parameter, ki se posreduje metodi dejanja, vedno celo število.

Metoda ujemanja sprejema naslednje parametre:

  • HttpContext - zajema vse specifične informacije HTTP o zahtevi
  • IRouter - predstavlja usmerjevalnik, ki bo uporabil omejitve
  • RouteKey - predstavlja parameter poti, ki se preverja
  • RouteDirection - enum, ki vsebuje dve vrednosti, in sicer IncomingRequest in UrlGeneration, in se uporablja za označevanje, ali se URL obdeluje iz zahteve HTTP ali ustvarja URL
  • RouteValues ​​- vsebuje parametre URL-ja

Struktura omejitve poti po meri v ASP.NET Core

Tu je primer strukture omejitve poti po meri:

javni razred CustomRouteConstraint: IRouteConstraint

    {

javni bool Match (HttpContext httpContext, IRouter route,

niz routeKey, vrednosti RouteValueDictionary,

RouteDirection routeDirection)

        {

vrzi novo NotImplementedException ();

        }

    }

Primer omejitve poti po meri v ASP.NET Core

Uvedimo zdaj omejitev poti po meri, ki lahko preveri ID-je e-pošte. Najprej ustvarite razred, ki razširja vmesnik IRouteConstraint in izvaja metodo Match. Naslednji delček kode prikazuje razred omejitve poti po meri z imenom EmailRouteContraint, ki razširja vmesnik IRouteConstraint.

javni razred EmailRouteContraint: IRouteConstraint

    {

javni bool Match (HttpContext httpContext, IRouter route,

niz routeKey, vrednosti RouteValueDictionary,

RouteDirection routeDirection)

        {

vrni res;

        }

    }

Naslednji seznam kod prikazuje razred EmailRouteConstraint z izvedeno metodo Match.

javni razred EmailRouteContraint: IRouteConstraint

    {

javni bool Match (HttpContext httpContext, IRouter route,

niz routeKey, vrednosti RouteValueDictionary,

RouteDirection routeDirection)

        {

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

            {

var parameterValueString = Convert.ToString (routeValue,

CultureInfo.InvariantCulture);

vrni IsEmailAddressValid (parameterValueString);

            }

vrni false;

        }

private bool IsEmailAddressValid (niz emailAddress)

        {

vrni res;

        }

    }

Upoštevajte, da metoda IsEmailAddressValid tukaj preprosto vrne »true«. Prepuščam vam, da napišete potrebno kodo za preverjanje e-poštnega naslova.

Omejitev poti po meri registrirajte v ASP.NET Core

Omejitev poti po meri morate registrirati s sistemom usmerjanja v metodi ConfigureServices razreda Startup. Naslednji delček kode to ponazarja.

public void ConfigureServices (storitve IServiceCollection)

      {

services.AddControllersWithViews ();

storitve.Configure (routeOptions =>

          {

routeOptions.ConstraintMap.Add ("ERC",

typeof (EmailRouteContraint));

          });

      }

Omejitev poti po meri konfigurirajte tudi v metodi Konfiguriranje zagonskega razreda, kot je prikazano v spodnjem delčku kode.

app.UseEndpoints (končne točke =>

{

endpoints.MapControllerRoute (

ime: "privzeto",

omejitve: novo {ERC = novo EmailRouteContraint ()},

vzorec: "{controller = Home} / {action = Index} / {id?}");

});

In to je to. Zdaj lahko v krmilniku ali v akcijskih metodah določite omejitev in začnete uporabljati aplikacijo.

Izvajalno okolje ASP.NET Core preveri, ali se definirani vzorec in omejitve poti ujemajo z vzorcem in vrednostmi dohodne zahteve. Logika preverjanja veljavnosti omejitve je definirana znotraj metode Match vaše omejitve poti po meri. Omejitve lahko izkoristite, da se izognete nepotrebnim zahtevam in potrdite vrednosti poti, preden je zahteva posredovana na dejanje.

Kako narediti več v ASP.NET Core:

  • Kako upravljati skrivnosti uporabnikov v ASP.NET Core
  • Kako zgraditi aplikacije gRPC v ASP.NET Core
  • Kako preusmeriti zahtevo v ASP.NET Core
  • Kako uporabiti usmerjanje atributov v ASP.NET Core
  • Kako prenesti parametre v metode dejanja v ASP.NET Core MVC
  • Kako uporabljati analizatorje API v ASP.NET Core
  • Kako uporabljati žetone podatkov poti v ASP.NET Core
  • Kako uporabljati različice API v ASP.NET Core
  • Kako uporabljati predmete za prenos podatkov v ASP.NET Core 3.1
  • Kako obravnavati napake 404 v ASP.NET Core MVC
  • Kako uporabiti vbrizgavanje odvisnosti v akcijskih filtrih v ASP.NET Core 3.1
  • Kako uporabiti vzorec možnosti v ASP.NET Core
  • Kako uporabljati usmerjanje končnih točk v ASP.NET Core 3.0 MVC
  • Kako izvoziti podatke v Excel v ASP.NET Core 3.0
  • Kako uporabljati LoggerMessage v ASP.NET Core 3.0
  • Kako poslati e-pošto v ASP.NET Core
  • Kako zapisati podatke v SQL Server v ASP.NET Core
  • Kako razporediti delovna mesta z uporabo Quartz.NET v ASP.NET Core
  • Kako vrniti podatke iz spletnega API-ja ASP.NET Core
  • Kako oblikovati podatke o odzivih v ASP.NET Core
  • Kako porabiti spletni API ASP.NET Core s pomočjo RestSharp
  • Kako izvajati asinhrne operacije z uporabo Dapperja
  • Kako uporabljati zastavice funkcij v ASP.NET Core
  • Kako uporabljati atribut FromServices v ASP.NET Core
  • Kako delati s piškotki v ASP.NET Core
  • Kako delati s statičnimi datotekami v ASP.NET Core
  • Kako uporabiti prepisovanje URL-jev Middleware v ASP.NET Core
  • Kako implementirati omejevanje hitrosti v ASP.NET Core
  • Kako uporabljati Azure Application Insights v ASP.NET Core
  • Uporaba naprednih funkcij NLog v ASP.NET Core
  • Kako ravnati z napakami v spletnem API-ju ASP.NET
  • Kako implementirati globalno obravnavo izjem v ASP.NET Core MVC
  • Kako ravnati z ničelnimi vrednostmi v ASP.NET Core MVC
  • Napredno spreminjanje različic v ASP.NET Core Web API
  • Kako delati s storitvami za delavce v ASP.NET Core
  • Kako uporabljati API za zaščito podatkov v ASP.NET Core
  • Kako uporabljati pogojno vmesno programsko opremo v ASP.NET Core
  • Kako delati s stanjem seje v ASP.NET Core
  • Kako napisati učinkovite krmilnike v ASP.NET Core
$config[zx-auto] not found$config[zx-overlay] not found