Programmēšana

Kā izveidot maršruta ierobežojumus ASP.NET Core

Maršruta ierobežojumi ASP.NET Core tiek izmantoti, lai filtrētu vai ierobežotu nevēlamu datu nokļūšanu jūsu kontroliera darbībās. Lai uzzinātu, kā veikt maršrutēšanu ASP.NET Core, varat atsaukties uz manu iepriekšējo rakstu par maršrutēšanu uz atribūtiem un maršrutēšanu uz konvencijām, izmantojot ASP.NET Core. Šis raksts pārsniedz pamatus, lai izpētītu uzlabotās darbības, izmantojot maršruta ierobežojumus.

Lai strādātu ar šajā rakstā sniegtajiem kodu piemēriem, sistēmā jābūt instalētai Visual Studio 2019. Ja jums vēl nav kopijas, varat lejupielādēt Visual Studio 2019 šeit.

Izveidojiet ASP.NET Core MVC projektu Visual Studio 2019

Vispirms izveidosim ASP.Net Core projektu Visual Studio 2019. Pieņemot, ka Visual Studio 2019 ir instalēta jūsu sistēmā, veiciet tālāk norādītās darbības, lai izveidotu jaunu ASP.Net Core projektu Visual Studio.

  1. Palaidiet Visual Studio IDE.
  2. Noklikšķiniet uz “Izveidot jaunu projektu”.
  3. Logā “Izveidot jaunu projektu” parādīto veidņu sarakstā atlasiet “ASP.NET Core Web Application”.
  4. Noklikšķiniet uz Tālāk.
  5. Logā “Konfigurēt jauno projektu” norādiet jaunā projekta nosaukumu un vietu.
  6. Pēc izvēles atzīmējiet izvēles rūtiņu “Novietot risinājumu un projektu vienā direktorijā” atkarībā no jūsu vēlmēm.
  7. Noklikšķiniet uz Izveidot.
  8. Nākamajā logā “Izveidot jaunu ASP.NET Core tīmekļa lietojumprogrammu” augšdaļā esošajā nolaižamajā sarakstā atlasiet .NET Core kā izpildlaiku un ASP.NET Core 3.1 (vai jaunāku).
  9. Atlasiet “Web Application (Model-View-Controller)” kā projekta veidni, lai izveidotu jaunu ASP.NET Core MVC lietojumprogrammu.
  10. Pārliecinieties, vai nav atzīmētas izvēles rūtiņas “Iespējot Docker atbalstu” un “Konfigurēt HTTPS”, jo mēs šeit neizmantosim šīs funkcijas.
  11. Pārliecinieties, vai autentifikācijai ir iestatīta vērtība “Nav autentifikācijas”, jo mēs arī neizmantosim autentifikāciju.
  12. Noklikšķiniet uz Izveidot.

Veicot šīs darbības, Visual Studio 2019 tiks izveidots jauns ASP.NET Core MVC projekts. Mēs izmantosim šo projektu tālāk esošajās sadaļās, lai ilustrētu, kā mēs varam izmantot maršruta ierobežojumus ASP.NET Core 3.1.

RouteCollection klase ASP.NET Core

ASP.NET Core klasē RouteTable ir īpašums ar nosaukumu Routes, kas visus maršrutus saglabā kā RouteCollection. Klasē RouteCollection ir dažas paplašināšanas metodes, kuras var izmantot maršrutu kartēšanai vai to ignorēšanai.

MapRoute ir pārslogota metode, kas kā ierobežojumu pieņem ierobežojumus. To var izmantot, lai pārsūtītu ierobežojumu maršrutam. Šī ir MapRoute metodes deklarācija.

public static Route MapRoute (šī RouteCollection maršruti, virknes nosaukums,

virknes URL, objekta noklusējumi, objekta ierobežojumi);

IRouteConstraint saskarne ASP.NET Core

IRouteConstraint interfeiss ir līgums, kas satur tikai vienas metodes, kuras nosaukums ir Match, deklarāciju. Šī saskarne jāpaplašina ar klasi un tajā jāievieš atbilstības metode, lai pārbaudītu, vai noteikts URL parametrs ir derīgs ierobežojumam. Lūk, kā tiek definēts IRouteConstraint interfeiss:

nosaukumvieta Microsoft.AspNetCore.Routing

{

publiskā saskarne IRouteConstraint

    {

bool Match (

HttpContext httpContext,

IRouter maršruts,

virknes maršrutsKey,

RouteValueDictionary vērtības,

RouteDirection routeDirection);

    }

}

ConstraintMap vārdnīca ASP.NET Core

ConstraintMap ir vārdnīca, kas satur maršruta ierobežojumu sarakstu, kas kartē maršruta ierobežojuma taustiņus ar IRouteConstraint ieviešanu. Tālāk sniegtais koda fragments parāda, kā šai vārdnīcai varat pievienot pielāgotos ierobežojumus.

public void ConfigureServices (IServiceCollection pakalpojumi)

{  

pakalpojumi. Konfigurēt (routeOptions =>

  { 

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

  }); 

Īstenojiet IRouteConstraint Match metodi ASP.NET Core

Lai izveidotu pielāgotu maršruta ierobežojumu, jums jāizveido klase, kas paplašina IRouteConstraint saskarni un ievieš tās Match metodi. Ierobežojumu var izmantot, lai novērstu nevēlamus ienākošos pieprasījumus un novērstu maršruta saskaņošanu, ja vien nav izpildīts kāds konkrēts nosacījums. Piemēram, jūs varētu vēlēties, lai darbības metodei nodotais parametrs vienmēr būtu vesels skaitlis.

Atbilstības metode pieņem šādus parametrus:

  • HttpContext - ietver visu HTTP specifisko informāciju par pieprasījumu
  • IRouter - apzīmē maršrutētāju, kas piemēros ierobežojumus
  • RouteKey - apzīmē pārbaudāmo maršruta parametru
  • RouteDirection - uzskaite, kas satur divas vērtības, proti, IncomingRequest un UrlGeneration, un tiek izmantota, lai norādītu, vai URL tiek apstrādāts no HTTP pieprasījuma vai tiek ģenerēts URL
  • RouteValues ​​- satur URL parametrus

ASP.NET Core pielāgota maršruta ierobežojuma struktūra

Šeit ir pielāgota maršruta ierobežojuma struktūras piemērs:

publiskā klase CustomRouteConstraint: IRouteConstraint

    {

public bool Match (HttpContext httpContext, IRouter maršruts,

virknes routeKey, RouteValueDictionary vērtības,

RouteDirection routeDirection)

        {

mest jaunu NotImplementedException ();

        }

    }

Pielāgota maršruta ierobežojuma piemērs ASP.NET Core

Tagad ieviesīsim pielāgotu maršruta ierobežojumu, kas var pārbaudīt e-pasta ID. Vispirms izveidojiet klasi, kas paplašina IRouteConstraint saskarni un ievieš Match metodi. Šis koda fragments parāda pielāgotu maršruta ierobežojuma klasi ar nosaukumu EmailRouteContraint, kas paplašina IRouteConstraint saskarni.

public class EmailRouteContraint: IRouteConstraint

    {

public bool Match (HttpContext httpContext, IRouter maršruts,

virknes routeKey, RouteValueDictionary vērtības,

RouteDirection routeDirection)

        {

atgriezties taisnība;

        }

    }

Šajā kodu sarakstā tiek parādīta klase EmailRouteConstraint ar ieviesto atbilstības metodi.

public class EmailRouteContraint: IRouteConstraint

    {

public bool Match (HttpContext httpContext, IRouter maršruts,

virknes routeKey, RouteValueDictionary vērtības,

RouteDirection routeDirection)

        {

ja (vērtības.TryGetValue (routeKey, out var routeValue))

            {

var parametraValueString = Convert.ToString (routeValue,

CultureInfo.InvariantCulture);

atgriezt IsEmailAddressValid (parametraValueString);

            }

atgriezties nepatiesa;

        }

privātā bool IsEmailAddressValid (virknes e-pasta adrese)

        {

atgriezties taisnība;

        }

    }

Ņemiet vērā, ka šeit izmantotā metode IsEmailAddressValid vienkārši atgriež vērtību “true”. Es atstāju jūsu ziņā uzrakstīt nepieciešamo kodu e-pasta adreses apstiprināšanai.

Reģistrējiet pielāgotu maršruta ierobežojumu ASP.NET Core

Pielāgotā maršruta ierobežojums jāreģistrē maršrutēšanas sistēmā Startup klases ConfigureServices metodē. Tālāk parādītais koda fragments to ilustrē.

public void ConfigureServices (IServiceCollection pakalpojumi)

      {

pakalpojumi.AddControllersWithViews ();

pakalpojumi. Konfigurēt (routeOptions =>

          {

routeOptions.ConstraintMap.Add ("ERC",

typeof (EmailRouteContraint));

          });

      }

Jums arī jākonfigurē pielāgotā maršruta ierobežojums Startup klases konfigurēšanas metodē, kā parādīts zemāk esošajā koda fragmentā.

app.UseEndpoints (galapunkti =>

{

galapunkti. MapControllerRoute (

nosaukums: "noklusējums",

ierobežojumi: jauns {ERC = new EmailRouteContraint ()},

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

});

Un viss. Tagad kontrolierī vai darbības metodēs varat norādīt ierobežojumu un sākt lietot lietojumprogrammu.

ASP.NET Core izpildlaiks tiek apstiprināts, ja definētais modelis un maršruta ierobežojumi sakrīt ar ienākošā pieprasījuma modeli un vērtībām. Ierobežojuma validācijas loģika ir definēta pielāgotā maršruta ierobežojuma atbilstības metodē. Varat izmantot ierobežojumus, lai izvairītos no nevajadzīgiem pieprasījumiem, kā arī lai apstiprinātu maršruta vērtības pirms pieprasījuma nodošanas darbības metodei.

Kā paveikt vairāk programmā ASP.NET Core:

  • Kā pārvaldīt lietotāju noslēpumus ASP.NET Core
  • Kā veidot gRPC lietojumprogrammas ASP.NET Core
  • Kā novirzīt pieprasījumu ASP.NET Core
  • Kā izmantot atribūtu maršrutēšanu ASP.NET Core
  • Kā nodot parametrus darbības metodēm ASP.NET Core MVC
  • Kā izmantot API analizatorus ASP.NET Core
  • Kā izmantot maršruta datu marķierus ASP.NET Core
  • Kā izmantot API versijas ASP.NET Core
  • Kā izmantot datu pārsūtīšanas objektus ASP.NET Core 3.1
  • Kā rīkoties ar 404 kļūdām ASP.NET Core MVC
  • Kā atkarības injekciju izmantot darbības filtros ASP.NET Core 3.1
  • Kā izmantot opciju modeli ASP.NET Core
  • Kā izmantot galapunkta maršrutēšanu ASP.NET Core 3.0 MVC
  • Kā eksportēt datus uz Excel programmā ASP.NET Core 3.0
  • Kā lietot LoggerMessage ASP.NET Core 3.0
  • Kā nosūtīt e-pastus ASP.NET Core
  • Kā reģistrēt datus SQL Server ASP.NET Core
  • Kā ieplānot darbus, izmantojot Quartz.NET ASP.NET Core
  • Kā atgriezt datus no ASP.NET Core Web API
  • Kā formatēt atbildes datus ASP.NET Core
  • Kā patērēt ASP.NET Core Web API, izmantojot RestSharp
  • Kā veikt asinhronas darbības, izmantojot Dapper
  • Kā izmantot funkciju karodziņus ASP.NET Core
  • Kā izmantot atribūtu FromServices ASP.NET Core
  • Kā strādāt ar sīkdatnēm ASP.NET Core
  • Kā strādāt ar statiskiem failiem ASP.NET Core
  • Kā izmantot URL pārrakstīšanas starpprogrammatūru ASP.NET Core
  • Kā ieviest ātruma ierobežošanu ASP.NET Core
  • Kā izmantot Azure Application Insights ASP.NET Core
  • Papildu NLog funkciju izmantošana ASP.NET Core
  • Kā rīkoties ar kļūdām ASP.NET Web API
  • Kā ieviest globālo izņēmumu apstrādi ASP.NET Core MVC
  • Kā rīkoties ar nulles vērtībām ASP.NET Core MVC
  • Uzlabota versiju veidošana ASP.NET Core Web API
  • Kā strādāt ar darbinieku pakalpojumiem ASP.NET Core
  • Kā izmantot datu aizsardzības API ASP.NET Core
  • Kā izmantot nosacīto starpprogrammatūru ASP.NET Core
  • Kā strādāt ar sesijas stāvokli ASP.NET Core
  • Kā rakstīt efektīvus kontrollerus ASP.NET Core
$config[zx-auto] not found$config[zx-overlay] not found