Smerovacie obmedzenia
ASP.NET Core môžete prenášať premenné na URL pomocou definovania šablón smerovania a môžete poskytovať predvolené, voliteľné a obmedzenia pre premenné.
Obmedzenie sa používa pridaním špecifikovaného názvu obmedzenia k atribútovej trase, ktorý sa používa nasledovne:
Niektoré obmedzenia sú už v rámci rámca uvedené, nasledovne:
Obmedzenia | príklad | Príklady zápasov | ilustrovať | int | {id:int} | 123456789, -123456789 | Zladiť sa s ľubovoľným celým číslom | Bool | {active:bool} | pravda, NEPRAVDA | Porovnať pravdu alebo nepravdu (záleží na veľkých písmenách) | Datetime | {dob:datetime} | 2016-12-31, 2016-12-31 19:32 | Zodpovedá platným hodnotám DateTime (v pevnej lokalite – pozri varovanie) | desatinná sústava | {cena:desatinné} | 49.99, -1,000.01 | Zodpovedá platným desatinným hodnotám (v pevnej lokalite – pozri varovanie) | dvojitá | {weight:double} | 1,234, -1,001,01e8 | Zodpovedá platným dvojitým hodnotám (v pevnej lokalite – pozri varovanie) | Plavák | {weight:float} | 1,234, -1,001,01e8 | Zodpovedá platným float hodnotám (v pevnej lokalite – pozri varovania) | GUID | {id:guid} | CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638} | Zodpovedá platným hodnotám GUID | dlhý | {tiká:dlhá} | 123456789, -123456789 | Zodpovedá platným dlhým hodnotám | minlength(hodnota) | {username:minlength(4)} | Rick | Reťazec musí mať aspoň 4 znaky | maxlength(hodnota) | {filename:maxlength(8)} | Richard | Reťazce nesmú presiahnuť 8 znakov | dĺžka (dĺžka) | {filename:length(12)} | somefile.txt | Reťazec musí mať presne 12 znakov | dĺžka (min,max) | {filename:length(8,16)} | somefile.txt | Reťazec musí mať aspoň 8 znakov a nesmie mať viac ako 16 znakov | min(hodnota) | {vek:min(18)} | 19 | Celočíselná hodnota musí byť aspoň 18 | max(hodnota) | {vek:max(120)} | 91 | Celočíselná hodnota nesmie presiahnuť 120 | Rozsah (minimálne, maximum) | {vek:rozsah(18,120)} | 91 | Celočíselná hodnota musí byť aspoň 18 a nesmie presiahnuť 120 | alfa | {meno:alfa} | Rick | Reťazec musí pozostávať z jedného alebo viacerých písmen abecedy (a-z, citlivé na veľké písmená). | regex(výraz) | {ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)} | 123-45-6789 | Reťazec musí zodpovedať regulárnemu výrazu (pozri tipy na definovanie regulárnych výrazov) | požadovaný | {name:required} | Rick | Používa sa na vynútenie prítomnosti neparametrických hodnôt počas generovania URL |
Vstavané obmedzenia fungujú pre väčšinu bežných prípadov použitia, ale niekedy si stále musíme prispôsobiť požadovaný efekt.
Obmedzenia vlastného smerovania
Vlastným obmedzením je implementovať rozhranie IRouteConstraint a potom preťažiť metódu Match, ktorá má štyri parametre.
Prvý parameter, httpContext, je kontext aktuálnej požiadavky
Druhý parameter, trasa, je trasa, ku ktorej patrí aktuálne obmedzenie
Tretí parameter, routeKey, je názov aktuálne kontrolovanej premennej, napríklad id v príklade na začiatku článku Štvrtým parametrom je slovníková hodnota, ktorú aktuálna URL zodpovedá, napríklad trasa príkladu na začiatku článku, ak je URL users/1, potom existuje slovník s key = id , value = 1. Samozrejme, existujú aj hodnoty pre iné premenné, ako je ovládač, akcia a podobne.
Piaty parameter, routeDirection, je enumerovaná hodnota, ktorá reprezentuje, či je URL požadovaná webom alebo generovaná metódou ako Url.Action.
Napríklad chceme definovať obmedzenie, ktoré určuje, že parametre prenesené trasou musia byť zadaná hodnota enumerácie.
Najprv si definujme enum:
Potom definujte obmedzenia:
Pridajte vlastné obmedzenia do metódy ConfigureServices v Startup.cs:
Použitie obmedzení na trasy:
(WebApplicationTest je aktuálny menný priestor)
{id:int:min(2)} trasa musí použiť min(2), inak vznikne konflikt pre id = 0 alebo id = 1.
Spustiť program a zladiť naše vlastné obmedzenia, keď sú trasy api/test/0, api/test/1, api/test/true a api/test/false.
Ak je trasa api/test/{celé číslo väčšie ako 2}, priradíme druhú trasu.
Iné prípady zodpovedajú tretej trase.
záver
Routovacie obmedzenia sú v niektorých scenároch veľmi užitočnou funkciou, ktorá môže znížiť kontrolné parametre v regulátore, a funkcia čiastočnej validácie parametrov môže byť implementovaná pomocou deklaratívneho attruibute, pričom niektoré duplicitné kontroly je možné extrahovať do obmedzení pre verejné použitie.
Konštruktér obmedzenia môže byť injektovaný, takže môže byť veľmi rozšíriteľný, a časť overenia parametrov je možné vykonať dotazovaním databázy.
Oficiálna webová stránka len stručne spomína smerovacie obmedzenia a tento článok poskytuje konkrétne príklady použitia smerovacích obmedzení.
|