Směrovací omezení
ASP.NET Core můžete předávat proměnné na URL definováním směrovacích šablon a můžete poskytovat výchozí, volitelná nastavení a omezení pro proměnné.
Toto omezení se používá přidáním specifikovaného názvu omezení k atributové cestě, které se používá následovně:
Některá omezení jsou již v rámci uvedena, a to následovně:
Omezení | příklad | Příklady zápasů | ilustrovat | int | {id:int} | 123456789, -123456789 | Přirovnejte libovolné celé číslo | Bool | {active:bool} | pravda, NEPRAVDA | Porovnat pravdivost nebo nepravdu (citlivé na velká písmena) | Datetime | {dob:datetime} | 2016-12-31, 2016-12-31 19:32 | Shoduje platné hodnoty DateTime (v pevné lokalitě – viz varování) | desetinná | {cena:desetinné} | 49.99, -1,000.01 | Odpovídá platným desetinným hodnotám (v pevné lokalitě – viz varování) | dvojitý | {weight:double} | 1,234, -1,001,01e8 | Splňuje platné dvojnásobné hodnoty (v pevné lokalitě – viz varování) | Plovák | {weight:float} | 1,234, -1,001,01e8 | Shoduje platné float hodnoty (v pevné lokalitě – viz varování) | GUID | {id:guid} | CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638} | Odpovídá platným hodnotám GUID | dlouhý | {tikání:dlouhé} | 123456789, -123456789 | Odpovídá platným dlouhým hodnotám | minlength(hodnota) | {username:minlength(4)} | Rick | Řetězec musí mít alespoň 4 znaky | maxlength(hodnota) | {filename:maxlength(8)} | Richard | Řetězce nesmí přesáhnout 8 znaků | délka (délka) | {filename:length(12)} | somefile.txt | Řetězec musí mít přesně 12 znaků | délka (min,max) | {filename:length(8,16)} | somefile.txt | Řetězec musí mít alespoň 8 znaků a nesmí být více než 16 znaků | min(hodnota) | {věk:min(18)} | 19 | Celočíselná hodnota musí být alespoň 18 | max(value) | {věk:max(120)} | 91 | Hodnota celého čísla nesmí přesáhnout 120 | Rozsah (minimální, maximálně) | {věk:rozsah(18,120)} | 91 | Hodnota celých čísel musí být alespoň 18 a nesmí přesáhnout 120 | alfa | {name:alpha} | Rick | Řetězec musí obsahovat jeden nebo více písmen písmen (a-z, citlivé na velká písmena). | regex(výraz) | {ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)} | 123-45-6789 | Řetězec musí odpovídat regulárnímu výrazu (viz tipy na definování regulárních výrazů) | požadovaný | {name:required} | Rick | Používá se k vynucení přítomnosti neparametrických hodnot během generování URL |
Vestavěná omezení fungují pro většinu běžných případů použití, ale někdy je stále potřeba přizpůsobit požadovaný efekt.
Omezení vlastního směrování
Vlastní omezení je implementovat rozhraní IRouteConstraint a poté přetížit metodu Match, která má čtyři parametry.
Prvním parametrem, httpContext, je kontext aktuálního požadavku
Druhý parametr, trasa, je trasa, ke které patří aktuální omezení
Třetí parametr, routeKey, je název aktuálně kontrolované proměnné, například id v příkladu na začátku článku Čtvrtým parametrem je slovníková hodnota, která odpovídá aktuální URL, například trasa příkladu na začátku článku, pokud je URL users/1, pak existuje slovník s key = id , value = 1. Samozřejmě existují i hodnoty pro jiné proměnné, jako je ovladač, akce atd.
Pátý parametr, routeDirection, je vyčíslovaná hodnota, která představuje, zda je URL požadována webem, nebo generována metodou jako Url.Action.
Například chceme definovat omezení, které určuje, že parametry předané trasou musí být zadaná hodnota výčtu.
Nejprve si definujme enum:
Pak definujte omezení:
Přidejte vlastní omezení do metody ConfigureServices v Startup.cs:
Použití omezení na trasy:
(WebApplicationTest je současný jmenný prostor)
{id:int:min(2)} Trasa musí použít min(2), jinak dojde ke konfliktu pro id = 0 nebo id = 1.
Spusť program a srovnat naše vlastní omezení, když jsou trasy api/test/0, api/test/1, api/test/true a api/test/false.
Pokud je trasa api/test/{celé číslo větší než 2}, spojte druhou trasu.
Jiné případy odpovídají třetí cestě.
závěr
Směrovací omezení jsou v některých scénářích velmi užitečnou funkcí, která může snížit kontrolní parametry v regulátoru, a funkce částečné validace parametrů může být implementována pomocí deklarativního attruibute, přičemž některé duplicitní kontroly lze extrahovat do omezení pro veřejné použití.
Konstruktor omezení lze injektovat, takže může být velmi rozšiřitelný, a část ověření parametrů lze provést dotazováním databáze.
Oficiální web pouze krátce zmiňuje směrovací omezení a tento článek poskytuje konkrétní příklady použití směrovacích omezení.
|