Programovanie

Ako vytvoriť obmedzenia trasy v ASP.NET Core

Obmedzenia smerovania v ASP.NET Core sa používajú na filtrovanie alebo obmedzovanie nežiaducich údajov v dosahovaní vašich akcií radiča. Základné informácie o smerovaní v ASP.NET Core nájdete v mojom predchádzajúcom článku o smerovaní založenom na atribútoch a smerovaní založenom na konvenciách v ASP.NET Core. Tento článok presahuje základné informácie o skúmaní pokročilých operácií využívajúcich obmedzenia trasy.

Ak chcete pracovať s príkladmi kódu uvedenými v tomto článku, mali by ste mať vo svojom systéme nainštalovanú aplikáciu Visual Studio 2019. Ak ešte nemáte kópiu, môžete si tu stiahnuť Visual Studio 2019.

Vytvorte projekt ASP.NET Core MVC v Visual Studio 2019

Najprv si vytvoríme projekt ASP.Net Core v Visual Studio 2019. Za predpokladu, že je vo vašom systéme nainštalovaný Visual Studio 2019, vytvorte nový projekt ASP.Net Core v Visual Studio podľa krokov uvedených nižšie.

  1. Spustite Visual Studio IDE.
  2. Kliknite na „Vytvoriť nový projekt“.
  3. V okne „Vytvoriť nový projekt“ vyberte zo zobrazeného zoznamu šablón „Webová aplikácia ASP.NET Core“.
  4. Kliknite na Ďalej.
  5. V okne „Konfigurácia nového projektu“ zadajte názov a umiestnenie nového projektu.
  6. Voliteľne začiarknite políčko „Umiestniť riešenie a projekt do rovnakého adresára“, podľa vašich preferencií.
  7. Kliknite na tlačidlo Vytvoriť.
  8. V nasledujúcom okne „Vytvorenie novej webovej aplikácie ASP.NET Core“ vyberte z rozbaľovacieho zoznamu v hornej časti .NET Core ako modul runtime a ASP.NET Core 3.1 (alebo novší).
  9. Vyberte „Webová aplikácia (Model-View-Controller)“ ako šablónu projektu na vytvorenie novej aplikácie ASP.NET Core MVC.
  10. Skontrolujte, či nie sú začiarknuté políčka „Povoliť podporu Docker“ a „Konfigurovať pre HTTPS“, pretože tu nebudeme tieto funkcie používať.
  11. Skontrolujte, či je overenie nastavené na „Bez overenia“, pretože tiež nebudeme používať overenie.
  12. Kliknite na tlačidlo Vytvoriť.

Nasledovaním týchto krokov vytvoríte nový projekt ASP.NET Core MVC v Visual Studio 2019. Tento projekt použijeme v sekciách nižšie na ilustráciu toho, ako môžeme použiť obmedzenia trasy v ASP.NET Core 3.1.

Trieda RouteCollection v ASP.NET Core

Trieda RouteTable v ASP.NET Core obsahuje vlastnosť s názvom Routes, ktorá ukladá všetky trasy ako RouteCollection. Trieda RouteCollection obsahuje niektoré metódy rozšírenia, ktoré možno použiť na mapovanie trás alebo ich ignorovanie.

MapRoute je preťažená metóda, ktorá prijíma obmedzenia ako parameter. Pomocou toho môžete preniesť svoje obmedzenie na trasu. Nasleduje deklarácia metódy MapRoute.

verejná statická Route MapRoute (táto RouteCollection trasy, názov reťazca,

reťazec url, predvolené hodnoty objektu, obmedzenia objektu);

Rozhranie IRouteConstraint v ASP.NET Core

Rozhranie IRouteConstraint je zmluva, ktorá obsahuje deklaráciu iba jednej metódy s názvom Match. Toto rozhranie musí byť rozšírené o triedu a v nej implementovanú metódu Match, aby sa skontrolovalo, či je konkrétny parameter URL platný pre dané obmedzenie. Takto je definované rozhranie IRouteConstraint:

menný priestor Microsoft.AspNetCore.Routing

{

verejné rozhranie IRouteConstraint

    {

bool zápas (

HttpContext httpContext,

Vonkajšia trasa,

reťazec routeKey,

Hodnoty RouteValueDictionary,

RouteDirection routeDirection);

    }

}

Slovník ConstraintMap v ASP.NET Core

ConstraintMap je slovník, ktorý obsahuje zoznam obmedzení smerovania, ktorý mapuje klávesy obmedzení smerovania na implementácie IRouteConstraint. Fragment kódu uvedený nižšie ilustruje, ako môžete do tohto slovníka pridať svoje vlastné obmedzenia.

public void ConfigureServices (služby IServiceCollection)

{  

services.Configure (routeOptions =>

  { 

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

  }); 

Implementujte metódu IRouteConstraint Match v ASP.NET Core

Ak chcete vytvoriť vlastné obmedzenie trasy, mali by ste vytvoriť triedu, ktorá rozširuje rozhranie IRouteConstraint a implementuje jeho metódu Match. Toto obmedzenie je možné použiť na zmarenie nechcených prichádzajúcich požiadaviek a na zabránenie párovaniu trasy, pokiaľ nie je splnená konkrétna podmienka. Napríklad budete chcieť zaistiť, aby parameter odovzdaný metóde akcie bol vždy celé číslo.

Metóda zhody akceptuje nasledujúce parametre:

  • HttpContext - zapuzdruje všetky špecifické informácie HTTP o požiadavke
  • IRouter - predstavuje smerovač, ktorý uplatní dané obmedzenia
  • RouteKey - predstavuje parameter trasy, ktorý sa overuje
  • RouteDirection - výčet, ktorý obsahuje dve hodnoty, konkrétne IncomingRequest a UrlGeneration, a slúži na označenie toho, či sa adresa URL spracováva z požiadavky HTTP alebo generuje adresu URL
  • RouteValues ​​- obsahuje parametre adresy URL

Štruktúra vlastného obmedzenia trasy v jadre ASP.NET

Tu je príklad štruktúry vlastného obmedzenia trasy:

verejná trieda CustomRouteConstraint: IRouteConstraint

    {

public bool Match (HttpContext httpContext, IRouter route,

reťazec routeKey, RouteValueDictionary hodnoty,

RouteDirection routeDirection)

        {

hodiť nový NotImplementedException ();

        }

    }

Príklad vlastného obmedzenia trasy v ASP.NET Core

Poďme teraz implementovať vlastné obmedzenie trasy, ktoré dokáže skontrolovať ID e-mailov. Najskôr vytvorte triedu, ktorá rozširuje rozhranie IRouteConstraint a implementuje metódu Match. Nasledujúci úryvok kódu zobrazuje vlastnú triedu obmedzenia trasy s názvom EmailRouteContraint, ktorá rozširuje rozhranie IRouteConstraint.

verejná trieda EmailRouteContraint: IRouteConstraint

    {

public bool Match (HttpContext httpContext, IRouter route,

reťazec routeKey, RouteValueDictionary hodnoty,

RouteDirection routeDirection)

        {

návrat pravdivý;

        }

    }

Nasledujúci zoznam kódov zobrazuje triedu EmailRouteConstraint s implementovanou metódou Match.

verejná trieda EmailRouteContraint: IRouteConstraint

    {

public bool Match (HttpContext httpContext, IRouter route,

reťazec routeKey, RouteValueDictionary hodnoty,

RouteDirection routeDirection)

        {

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

            {

var parameterValueString = Convert.ToString (routeValue,

CultureInfo.InvariantCulture);

návrat IsEmailAddressValid (parameterValueString);

            }

návrat nepravdivý;

        }

private bool IsEmailAddressValid (reťazec emailAddress)

        {

návrat pravdivý;

        }

    }

Upozorňujeme, že metóda IsEmailAddressValid tu jednoducho vráti hodnotu „true“. Nechám na vás, aby ste napísali potrebný kód na overenie e-mailovej adresy.

Zaregistrujte si vlastné obmedzenie trasy v ASP.NET Core

Svoje vlastné obmedzenie trasy by ste mali zaregistrovať v smerovacom systéme v metóde ConfigureServices triedy Startup. Ilustruje to nasledujúci úryvok kódu.

public void ConfigureServices (služby IServiceCollection)

      {

services.AddControllersWithViews ();

services.Configure (routeOptions =>

          {

routeOptions.ConstraintMap.Add ("ERC",

typeof (EmailRouteContraint));

          });

      }

Mali by ste tiež nakonfigurovať svoje vlastné obmedzenie trasy v metóde Configure triedy Startup, ako je uvedené v útržku kódu nižšie.

app.UseEndpoints (endpoints =>

{

endpoints.MapControllerRoute (

názov: "predvolené",

obmedzenia: new {ERC = new EmailRouteContraint ()},

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

});

A to je všetko. Teraz môžete určiť obmedzenie vo vašom radiči alebo vo vašich metódach akcie a začať používať aplikáciu.

Modul runtime ASP.NET Core overuje, či sa definované obmedzenia vzoru a smerovania zhodujú so vzorom a hodnotami prichádzajúcej požiadavky. Logika overenia obmedzenia je definovaná vo vnútri metódy Match vášho vlastného obmedzenia trasy. Môžete využiť obmedzenia, aby ste sa vyhli zbytočným požiadavkám, ako aj na overenie hodnôt smerovania pred odoslaním požiadavky metóde akcie.

Ako urobiť viac v ASP.NET Core:

  • Ako spravovať používateľské tajomstvá v ASP.NET Core
  • Ako zostaviť aplikácie gRPC v ASP.NET Core
  • Ako presmerovať požiadavku v ASP.NET Core
  • Ako používať smerovanie atribútov v ASP.NET Core
  • Ako odovzdať parametre akčným metódam v ASP.NET Core MVC
  • Ako používať analyzátory API v ASP.NET Core
  • Ako používať tokeny dát trasy v ASP.NET Core
  • Ako používať spravovanie verzií API v ASP.NET Core
  • Ako používať objekty na prenos dát v ASP.NET Core 3.1
  • Ako spracovať chyby 404 v ASP.NET Core MVC
  • Ako používať vkladanie závislostí do filtrov akcií v ASP.NET Core 3.1
  • Ako používať vzor možností v ASP.NET Core
  • Ako používať smerovanie koncového bodu v ASP.NET Core 3.0 MVC
  • Ako exportovať údaje do programu Excel v ASP.NET Core 3.0
  • Ako používať LoggerMessage v ASP.NET Core 3.0
  • Ako posielať e-maily v ASP.NET Core
  • Ako prihlásiť údaje na server SQL Server v ASP.NET Core
  • Ako plánovať úlohy pomocou Quartz.NET v ASP.NET Core
  • Ako vrátiť dáta z webového rozhrania ASP.NET Core Web API
  • Ako formátovať údaje odpovedí v ASP.NET Core
  • Ako konzumovať webové rozhranie API ASP.NET Core pomocou nástroja RestSharp
  • Ako vykonávať asynchronné operácie pomocou nástroja Dapper
  • Ako používať príznaky funkcií v ASP.NET Core
  • Ako používať atribút FromServices v ASP.NET Core
  • Ako pracovať s cookies v ASP.NET Core
  • Ako pracovať so statickými súbormi v ASP.NET Core
  • Ako používať middleware na prepisovanie adries URL v ASP.NET Core
  • Ako implementovať obmedzenie rýchlosti v ASP.NET Core
  • Ako používať Azure Application Insights v ASP.NET Core
  • Používanie pokročilých funkcií NLog v ASP.NET Core
  • Ako spracovať chyby v webovom rozhraní API ASP.NET
  • Ako implementovať globálne spracovanie výnimiek v ASP.NET Core MVC
  • Ako spracovať nulové hodnoty v ASP.NET Core MVC
  • Pokročilé spravovanie verzií v webovom rozhraní API ASP.NET Core
  • Ako pracovať s pracovnými službami v ASP.NET Core
  • Ako používať rozhranie Data Protection API v ASP.NET Core
  • Ako používať podmienený middleware v ASP.NET Core
  • Ako pracovať so stavom relácie v ASP.NET Core
  • Ako písať efektívne radiče v ASP.NET Core
$config[zx-auto] not found$config[zx-overlay] not found