Programování

Jak vytvořit omezení trasy v ASP.NET Core

Omezení směrování v ASP.NET Core se používají k odfiltrování nebo omezení nežádoucích dat v dosažení vašich akcí řadiče. Primer na směrování v ASP.NET Core najdete v mém předchozím článku o směrování na základě atributů versus směrování na základě konvencí v ASP.NET Core. Tento článek jde nad rámec základů, aby prozkoumal pokročilé operace pomocí omezení trasy.

Chcete-li pracovat s příklady kódu uvedenými v tomto článku, měli byste mít ve svém systému nainstalovanou Visual Studio 2019. Pokud ještě nemáte kopii, můžete si stáhnout Visual Studio 2019 zde.

Vytvořte projekt ASP.NET Core MVC v sadě Visual Studio 2019

Nejprve si vytvořme projekt ASP.Net Core ve Visual Studiu 2019. Za předpokladu, že je ve vašem systému nainstalovaná Visual Studio 2019, vytvořte nový projekt ASP.Net Core ve Visual Studiu podle níže uvedených kroků.

  1. Spusťte Visual Studio IDE.
  2. Klikněte na „Vytvořit nový projekt“.
  3. V okně „Vytvořit nový projekt“ vyberte ze zobrazeného seznamu šablon „Webová aplikace ASP.NET Core“.
  4. Klikněte na Další.
  5. V okně „Konfigurace nového projektu“ zadejte název a umístění nového projektu.
  6. Volitelně zaškrtněte políčko „Umístit řešení a projekt do stejného adresáře“, podle vašich preferencí.
  7. Klikněte na Vytvořit.
  8. V okně „Vytvořit novou webovou aplikaci ASP.NET Core“, které se zobrazí dále, vyberte jako běhový modul .NET Core a z rozevíracího seznamu v horní části vyberte ASP.NET Core 3.1 (nebo novější).
  9. Vyberte „Webová aplikace (Model-View-Controller)“ jako šablonu projektu a vytvořte novou aplikaci ASP.NET Core MVC.
  10. Ujistěte se, že políčka „Povolit podporu Dockeru“ a „Konfigurovat pro HTTPS“ nejsou zaškrtnuta, protože zde tyto funkce nebudeme používat.
  11. Ujistěte se, že je ověřování nastaveno na „Bez ověřování“, protože také nebudeme používat ověřování.
  12. Klikněte na Vytvořit.

Následující kroky vytvoří nový projekt ASP.NET Core MVC v sadě Visual Studio 2019. Tento projekt použijeme v níže uvedených částech, abychom ilustrovali, jak můžeme použít omezení trasy v ASP.NET Core 3.1.

RouteCollection Třída v ASP.NET Core

RouteTable Třída v ASP.NET Core obsahuje vlastnost s názvem Routes, která ukládá všechny trasy jako RouteCollection. Třída RouteCollection obsahuje některé metody rozšíření, které lze použít k mapování tras nebo k jejich ignorování.

MapRoute je přetížená metoda, která přijímá omezení jako parametr. Tímto způsobem můžete své omezení předat trase. Následuje deklarace metody MapRoute.

veřejná statická Route MapRoute (tato RouteCollection trasy, název řetězce,

řetězec URL, výchozí hodnoty objektu, omezení objektu);

Rozhraní IRouteConstraint v ASP.NET Core

Rozhraní IRouteConstraint je smlouva, která obsahuje deklaraci pouze jedné metody s názvem Match. Toto rozhraní musí být rozšířeno o třídu a v ní implementovanou metodu Match, aby se zkontrolovalo, zda je konkrétní parametr URL platný pro omezení. Zde je definováno rozhraní IRouteConstraint:

jmenný prostor Microsoft.AspNetCore.Routing

{

veřejné rozhraní IRouteConstraint

    {

bool Match (

HttpContext httpContext,

Vnitřní trasa,

řetězec routeKey,

Hodnoty RouteValueDictionary,

RouteDirection routeDirection);

    }

}

Slovník ConstraintMap v ASP.NET Core

ConstraintMap je slovník, který obsahuje seznam omezení trasy, která mapuje klíče omezení trasy na implementace IRouteConstraint. Fragment kódu uvedený níže ukazuje, jak můžete do tohoto slovníku přidat vlastní omezení.

public void ConfigureServices (služby IServiceCollection)

{  

services.Configure (routeOptions =>

  { 

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

  }); 

Implementujte metodu IRouteConstraint Match v ASP.NET Core

Chcete-li vytvořit vlastní omezení trasy, měli byste vytvořit třídu, která rozšiřuje rozhraní IRouteConstraint a implementuje jeho metodu Match. Omezení lze použít k zmaření nežádoucích příchozích požadavků a zabránění shodě trasy, pokud není splněna konkrétní podmínka. Můžete například chtít zajistit, aby parametr předaný metodě akce byl vždy celé číslo.

Metoda Match přijímá následující parametry:

  • HttpContext - zapouzdřuje všechny specifické informace HTTP o požadavku
  • IRouter - představuje směrovač, který použije omezení
  • RouteKey - představuje parametr trasy, který se ověřuje
  • RouteDirection - výčet, který obsahuje dvě hodnoty, konkrétně IncomingRequest a UrlGeneration, a slouží k označení, zda se adresa URL zpracovává z požadavku HTTP nebo generuje adresu URL
  • RouteValues ​​- obsahuje parametry URL

Struktura omezení vlastní trasy v ASP.NET Core

Zde je příklad struktury vlastního omezení trasy:

veřejná třída CustomRouteConstraint: IRouteConstraint

    {

public bool Match (HttpContext httpContext, IRouter route,

řetězec routeKey, RouteValueDictionary hodnoty,

RouteDirection routeDirection)

        {

hodit nový NotImplementedException ();

        }

    }

Příklad omezení vlastní trasy v ASP.NET Core

Pojďme nyní implementovat vlastní omezení trasy, které dokáže zkontrolovat e-mailová ID. Nejprve vytvořte třídu, která rozšiřuje rozhraní IRouteConstraint a implementuje metodu Match. Následující fragment kódu ukazuje vlastní třídu omezení trasy s názvem EmailRouteContraint, která rozšiřuje rozhraní IRouteConstraint.

veřejná třída EmailRouteContraint: IRouteConstraint

    {

public bool Match (HttpContext httpContext, IRouter route,

řetězec routeKey, RouteValueDictionary hodnoty,

RouteDirection routeDirection)

        {

návrat true;

        }

    }

Následující výpis kódu ukazuje EmailRouteConstraint třídu s implementovanou metodou Match.

veřejná třída EmailRouteContraint: IRouteConstraint

    {

public bool Match (HttpContext httpContext, IRouter route,

řetězec routeKey, RouteValueDictionary hodnoty,

RouteDirection routeDirection)

        {

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

            {

var parameterValueString = Convert.ToString (routeValue,

CultureInfo.InvariantCulture);

vrátit IsEmailAddressValid (parameterValueString);

            }

návrat false;

        }

private bool IsEmailAddressValid (řetězec emailAddress)

        {

návrat true;

        }

    }

Všimněte si, že metoda IsEmailAddressValid zde jednoduše vrátí hodnotu „true“. Nechám na vás, abyste napsali nezbytný kód pro ověření e-mailové adresy.

Zaregistrujte si vlastní omezení trasy v ASP.NET Core

Měli byste zaregistrovat své vlastní omezení trasy u směrovacího systému v metodě ConfigureServices třídy Startup. Následující fragment kódu to ilustruje.

public void ConfigureServices (služby IServiceCollection)

      {

services.AddControllersWithViews ();

services.Configure (routeOptions =>

          {

routeOptions.ConstraintMap.Add ("ERC",

typeof (EmailRouteContraint));

          });

      }

Měli byste také nakonfigurovat vlastní omezení trasy v metodě Configure třídy Startup, jak je ukázáno v fragmentu kódu níže.

app.UseEndpoints (endpoints =>

{

endpoints.MapControllerRoute (

name: "default",

omezení: new {ERC = new EmailRouteContraint ()},

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

});

A to je vše. Nyní můžete určit omezení v ovladači nebo v metodách akce a začít používat aplikaci.

Modul runtime ASP.NET Core ověří, zda definovaná omezení vzoru a směrování odpovídají vzoru a hodnotám příchozího požadavku. Logika ověření omezení je definována uvnitř metody Match vašeho vlastního omezení trasy. Můžete využít výhod omezení, abyste se vyhnuli zbytečným požadavkům a také ověřili hodnoty trasy před předáním požadavku metodě akce.

Jak dělat více v ASP.NET Core:

  • Jak spravovat uživatelská tajemství v ASP.NET Core
  • Jak vytvářet aplikace gRPC v ASP.NET Core
  • Jak přesměrovat požadavek v ASP.NET Core
  • Jak používat směrování atributů v ASP.NET Core
  • Jak předat parametry akčním metodám v ASP.NET Core MVC
  • Jak používat analyzátory API v ASP.NET Core
  • Jak používat tokeny dat trasy v ASP.NET Core
  • Jak používat správu verzí API v ASP.NET Core
  • Jak používat objekty přenosu dat v ASP.NET Core 3.1
  • Jak zpracovat chyby 404 v ASP.NET Core MVC
  • Jak používat vkládání závislostí ve filtrech akcí v ASP.NET Core 3.1
  • Jak používat vzor možností v ASP.NET Core
  • Jak používat směrování koncových bodů v ASP.NET Core 3.0 MVC
  • Jak exportovat data do aplikace Excel v ASP.NET Core 3.0
  • Jak používat LoggerMessage v ASP.NET Core 3.0
  • Jak odesílat e-maily v ASP.NET Core
  • Jak protokolovat data na SQL Server v ASP.NET Core
  • Jak naplánovat úlohy pomocí Quartz.NET v ASP.NET Core
  • Jak vrátit data z webového rozhraní API ASP.NET Core
  • Jak formátovat data odpovědí v ASP.NET Core
  • Jak konzumovat webové rozhraní API ASP.NET Core pomocí RestSharp
  • Jak provádět asynchronní operace pomocí nástroje Dapper
  • Jak používat příznaky funkcí v ASP.NET Core
  • Jak používat atribut FromServices v ASP.NET Core
  • Jak pracovat s cookies v ASP.NET Core
  • Jak pracovat se statickými soubory v ASP.NET Core
  • Jak používat Middleware pro přepis adres URL v ASP.NET Core
  • Jak implementovat omezení rychlosti v ASP.NET Core
  • Jak používat Azure Application Insights v ASP.NET Core
  • Používání pokročilých funkcí NLog v ASP.NET Core
  • Jak zpracovat chyby v ASP.NET Web API
  • Jak implementovat globální zpracování výjimek v ASP.NET Core MVC
  • Jak zacházet s hodnotami null v ASP.NET Core MVC
  • Pokročilé správy verzí v ASP.NET Core Web API
  • Jak pracovat s pracovními službami v ASP.NET Core
  • Jak používat rozhraní Data Protection API v ASP.NET Core
  • Jak používat podmíněný middleware v ASP.NET Core
  • Jak pracovat se stavem relace v ASP.NET Core
  • Jak psát efektivní řadiče v ASP.NET Core