Programavimas

Kaip sukurti maršruto apribojimus ASP.NET Core

Maršruto apribojimai ASP.NET Core naudojami norint filtruoti ar apriboti nepageidaujamus duomenis nuo jūsų valdiklio veiksmų. Norėdami sužinoti apie pagrindinį maršrutą „ASP.NET Core“, galite perskaityti mano ankstesnį straipsnį apie atributais pagrįstą maršrutizavimą, palyginti su konvencijomis pagrįstu maršruto parinkimu ASP.NET Core. Šis straipsnis peržengia pagrindinius dalykus, kad būtų galima ištirti išplėstines operacijas naudojant maršruto apribojimus.

Norėdami dirbti su šiame straipsnyje pateiktais kodų pavyzdžiais, sistemoje turite būti įdiegę „Visual Studio 2019“. Jei dar neturite kopijos, galite atsisiųsti „Visual Studio 2019“ čia.

Sukurkite ASP.NET Core MVC projektą „Visual Studio 2019“

Pirmiausia, sukurkime ASP.Net Core projektą „Visual Studio 2019“. Darant prielaidą, kad „Visual Studio 2019“ yra įdiegta jūsų sistemoje, atlikite toliau nurodytus veiksmus, kad sukurtumėte naują „ASP.Net Core“ projektą „Visual Studio“.

  1. Paleiskite „Visual Studio IDE“.
  2. Spustelėkite „Sukurti naują projektą“.
  3. Lange „Kurti naują projektą“ iš rodomų šablonų sąrašo pasirinkite „ASP.NET Core Web Application“.
  4. Spustelėkite Pirmyn.
  5. Lange „Konfigūruoti naują projektą“ nurodykite naujo projekto pavadinimą ir vietą.
  6. Pasirinktinai pažymėkite žymės langelį „Įdėti sprendimą ir projektą tame pačiame kataloge“, atsižvelgiant į jūsų pageidavimus.
  7. Spustelėkite Sukurti.
  8. Kitame rodomame lange „Sukurti naują ASP.NET Core žiniatinklio programą“ viršuje esančiame išskleidžiamajame sąraše pasirinkite .NET Core kaip vykdymo laiką ir ASP.NET Core 3.1 (ar naujesnę).
  9. Norėdami sukurti naują ASP.NET Core MVC programą, kaip projekto šabloną pasirinkite „Web Application (Model-View-Controller)“.
  10. Įsitikinkite, kad nepažymėti žymės langeliai „Įgalinti„ Docker “palaikymą“ ir „Konfigūruoti HTTPS“, nes čia nenaudosime tų funkcijų.
  11. Įsitikinkite, kad autentifikavimas nustatytas kaip „Nėra autentifikavimo“, nes mes taip pat nenaudosime autentifikavimo.
  12. Spustelėkite Sukurti.

Atlikę šiuos veiksmus, „Visual Studio 2019“ sukurs naują ASP.NET Core MVC projektą. Šį projektą naudosime toliau pateiktose skiltyse, kad parodytume, kaip mes galime naudoti maršruto apribojimus ASP.NET Core 3.1.

„RouteCollection“ klasė ASP.NET Core

ASP.NET Core „RouteTable“ klasėje yra ypatybė „Routes“, kuri visus maršrutus saugo kaip „RouteCollection“. „RouteCollection“ klasėje yra keletas plėtinių metodų, kuriuos galima naudoti žemėlapiams žymėti arba jų nepaisyti.

„MapRoute“ yra perkrautas metodas, kuris priima apribojimus kaip parametrą. Tai galite naudoti norėdami perduoti savo apribojimą maršrutui. Žemiau pateikiama „MapRoute“ metodo deklaracija.

public static Route MapRoute (tai „RouteCollection“ maršrutai, eilutės pavadinimas,

eilutės URL, objekto numatytieji, objekto apribojimai);

„IRouteConstraint“ sąsaja ASP.NET Core

„IRouteConstraint“ sąsaja yra sutartis, kurioje pateikiama tik vieno metodo, pavadinto „Match“, deklaracija. Ši sąsaja turi būti išplėsta klase ir joje įdiegtu „Match“ metodu, kad būtų galima patikrinti, ar tam tikras URL parametras yra tinkamas apribojimui. Štai kaip apibrėžiama „IRouteConstraint“ sąsaja:

vardų sritis „Microsoft.AspNetCore.Routing“

{

viešoji sąsaja „IRouteConstraint“

    {

„Bool Match“ (

„HttpContext httpContext“,

„IRouter“ maršrutas,

eilutės maršrutasKey,

„RouteValueDictionary“ vertės,

RouteDirection routeDirection);

    }

}

„ConstraintMap“ žodynas ASP.NET Core

„ConstraintMap“ yra žodynas, kuriame yra maršruto apribojimų sąrašas, kuriame žemėlapio maršruto apribojimo raktai pateikiami į „IRouteConstraint“ įgyvendinimus. Žemiau pateiktas kodo fragmentas parodo, kaip galite pridėti pasirinktinius apribojimus į šį žodyną.

public void „ConfigureServices“ („IServiceCollection“ paslaugos)

{  

paslaugos. Konfigūruoti (routeOptions =>

  { 

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

  }); 

Įdiekite „IRouteConstraint Match“ metodą ASP.NET Core

Norėdami sukurti pasirinktinį maršruto apribojimą, turėtumėte sukurti klasę, pratęsiančią „IRouteConstraint“ sąsają ir įgyvendinančią jos „Match“ metodą. Apribojimas gali būti naudojamas norint užkirsti kelią nepageidaujamoms gaunamoms užklausoms ir neleisti suderinti maršruto, nebent įvykdyta konkreti sąlyga. Pvz., Galbūt norėsite užtikrinti, kad veiksmo metodui perduotas parametras visada būtų sveikasis skaičius.

Atitikties metodas priima šiuos parametrus:

  • „HttpContext“ - apima visą HTTP specifinę informaciją apie užklausą
  • „IRouter“ - reiškia maršrutizatorių, kuris taikys apribojimus
  • RouteKey - reiškia maršruto parametrą, kuris yra patvirtinamas
  • RouteDirection - sąrašas, kuriame yra dvi reikšmės, būtent „IncomingRequest“ ir „UrlGeneration“, ir naudojamas nurodyti, ar URL apdorojamas iš HTTP užklausos, ar generuojamas URL
  • RouteValues ​​- yra URL parametrai

ASP.NET Core pasirinktinio maršruto apribojimo struktūra

Čia pateikiamas pasirinktinio maršruto apribojimo struktūros pavyzdys:

viešoji klasė „CustomRouteConstraint“: „IRouteConstraint“

    {

viešoji „Bool Match“ („HttpContext httpContext“, „IRouter“ maršrutas,

eilutės routeKey, RouteValueDictionary reikšmės,

RouteDirection routeDirection)

        {

mesti naują NotImplementedException ();

        }

    }

ASP.NET Core tinkinto maršruto apribojimo pavyzdys

Dabar įgyvendinkime pasirinktinį maršruto apribojimą, kuris gali patikrinti el. Pašto adresus. Pirmiausia sukurkite klasę, kuri pratęsia „IRouteConstraint“ sąsają ir įgyvendina „Match“ metodą. Šis kodo fragmentas rodo pasirinktą maršruto suvaržymo klasę, pavadintą „EmailRouteContraint“, kuri pratęsia „IRouteConstraint“ sąsają.

viešosios klasės „EmailRouteContraint“: „IRouteConstraint“

    {

viešoji „Bool Match“ („HttpContext httpContext“, „IRouter“ maršrutas,

eilutės routeKey, RouteValueDictionary reikšmės,

RouteDirection routeDirection)

        {

grįžti tiesa;

        }

    }

Šiame kodų sąraše rodoma „EmailRouteConstraint“ klasė su įdiegtu „Match“ metodu.

viešosios klasės „EmailRouteContraint“: „IRouteConstraint“

    {

viešoji „Bool Match“ („HttpContext httpContext“, „IRouter“ maršrutas,

eilutės routeKey, RouteValueDictionary reikšmės,

RouteDirection routeDirection)

        {

jei (reikšmės.TryGetValue (routeKey, out var routeValue))

            {

var parametroValueString = Convert.ToString (routeValue,

CultureInfo.InvariantCulture);

grąžinti „IsEmailAddressValid“ (parametrasValueString);

            }

grąžinti klaidingą;

        }

privatus „Bool“ „IsEmailAddressValid“ (eilutės el. pašto adresas)

        {

grįžti tiesa;

        }

    }

Atkreipkite dėmesį, kad čia pateiktas „IsEmailAddressValid“ metodas tiesiog pateikia „true“. Aš palieku jums parašyti reikiamą kodą, kad patvirtintumėte el. Pašto adresą.

Užregistruokite pasirinktinį maršruto apribojimą ASP.NET Core

Turėtumėte užregistruoti pasirinktinį maršruto apribojimą maršruto parinkimo sistemoje „Startup“ klasės „ConfigureServices“ metodu. Tai iliustruoja šis kodo fragmentas.

public void „ConfigureServices“ („IServiceCollection“ paslaugos)

      {

paslaugos.AddControllersWithViews ();

paslaugos. Konfigūruoti (routeOptions =>

          {

routeOptions.ConstraintMap.Add („ERC“,

typeof (EmailRouteContraint));

          });

      }

Taip pat turėtumėte sukonfigūruoti pasirinktinį maršruto apribojimą „Startup“ klasės konfigūravimo metodu, kaip parodyta žemiau esančiame kodo fragmente.

app.UseEndpoints (pabaigos taškai =>

{

galutiniai taškai. „MapControllerRoute“ (

pavadinimas: „numatytasis“,

apribojimai: naujas {ERC = new EmailRouteContraint ()},

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

});

Štai ir viskas. Dabar galite nurodyti apribojimą savo valdiklyje arba savo veiksmų metodus ir pradėti naudoti programą.

ASP.NET Core vykdymo laikas patikrinamas, jei apibrėžtas šablonas ir maršruto apribojimai atitinka gaunamos užklausos modelį ir vertes. Apribojimo patvirtinimo logika apibrėžta jūsų pritaikyto maršruto apribojimo „Match“ metode. Galite pasinaudoti apribojimais, kad išvengtumėte nereikalingų užklausų, taip pat patvirtinkite maršruto reikšmes prieš užklausą perduodant veiksmo metodui.

Kaip padaryti daugiau naudojant „ASP.NET Core“:

  • Kaip valdyti vartotojo paslaptis ASP.NET Core
  • Kaip sukurti gRPC programas ASP.NET Core
  • Kaip peradresuoti užklausą ASP.NET Core
  • Kaip naudoti atributų nukreipimą ASP.NET Core
  • Kaip perduoti parametrus veiksmų metodams ASP.NET Core MVC
  • Kaip naudoti API analizatorius ASP.NET Core
  • Kaip naudoti maršruto duomenų žetonus ASP.NET Core
  • Kaip naudoti API versijas „ASP.NET Core“
  • Kaip naudoti duomenų perdavimo objektus ASP.NET Core 3.1
  • Kaip tvarkyti 404 klaidas ASP.NET Core MVC
  • Kaip naudoti priklausomybės įpurškimą veiksmo filtruose ASP.NET Core 3.1
  • Kaip naudoti ASP.NET Core parinkčių modelį
  • Kaip naudoti galinių taškų nukreipimą ASP.NET Core 3.0 MVC
  • Kaip eksportuoti duomenis į „Excel“ naudojant ASP.NET Core 3.0
  • Kaip naudoti „LoggerMessage“ ASP.NET Core 3.0
  • Kaip siųsti el. Laiškus naudojant ASP.NET Core
  • Kaip registruoti duomenis į „SQL Server“ naudojant ASP.NET Core
  • Kaip suplanuoti darbus naudojant „Quartz.NET“ ASP.NET Core
  • Kaip grąžinti duomenis iš ASP.NET Core Web API
  • Kaip formatuoti atsakymo duomenis ASP.NET Core
  • Kaip suvartoti ASP.NET Core Web API naudojant „RestSharp“
  • Kaip atlikti asinchronines operacijas naudojant „Dapper“
  • Kaip naudoti funkcijų žymes „ASP.NET Core“
  • Kaip naudoti „FromServices“ atributą „ASP.NET Core“
  • Kaip dirbti su slapukais ASP.NET Core
  • Kaip dirbti su statiniais failais sistemoje ASP.NET Core
  • Kaip naudoti URL perrašymo tarpinę programinę įrangą ASP.NET Core
  • Kaip įdiegti normos ribojimą ASP.NET Core
  • Kaip naudoti „Azure Application Insights“ ASP.NET Core
  • Išplėstinių „NLog“ funkcijų naudojimas „ASP.NET Core“
  • Kaip tvarkyti klaidas ASP.NET žiniatinklio API
  • Kaip įdiegti visuotinį išimčių tvarkymą ASP.NET Core MVC
  • Kaip tvarkyti nulines reikšmes ASP.NET Core MVC
  • Išplėstinė ASP.NET „Core Web API“ versijų versija
  • Kaip dirbti su darbuotojų paslaugomis ASP.NET Core
  • Kaip naudoti duomenų apsaugos API ASP.NET Core
  • Kaip naudoti sąlyginę tarpinę programinę įrangą ASP.NET Core
  • Kaip dirbti su seanso būsena ASP.NET Core
  • Kaip rašyti efektyvius valdiklius ASP.NET Core