Útvonaltervezési korlátok
ASP.NET Core esetén útvonal-sablonok meghatározásával továbbíthatod az URL-eken változókat, és megadhatod az alapértelmezett beállításokat, opcionális lehetőségeket és korlátokat a változókhoz.
A korlátozást úgy használják, hogy a megadott korlátozás nevet hozzáadják az attribútumhoz, amely a következőképpen történik:
Néhány korlátozás már rendelkezésre áll a keretrendszerben, az alábbiak szerint:
Korlátok | példa | Példák mérkőzésekre | illusztrál | int | {id:int} | 123456789, -123456789 | Egyeztess bármely egész számot | bool | {active:bool} | igaz, HAMIS | Igaz vagy hamis egyezés (kis- és kisméretérzékeny) | Dátum | {dob:datetime} | 2016-12-31, 2016-12-31 19:32 | Egyezik érvényes DateTime értékekkel (fix helyen – lásd a figyelmeztetést) | tizedes | {price:decimal} | 49.99, -1,000.01 | Érvényes tizedes értékeket egyezik meg (fix helyességben – lásd a figyelmeztetést) | Kettős | {súly:dupla} | 1.234, -1,001.01e8 | Érvényes dupla értékeket egyezik meg (fix helyen) – lásd a figyelmeztetést) | Float | {súly:lebeg} | 1.234, -1,001.01e8 | Érvényes lebegő értékeket egyezik (fix helyen – lásd figyelmeztetéseket) | Guid | {id:guid} | CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638} | Érvényes GUID értékek egyezik | hosszú | {tik-e:hosszú} | 123456789, -123456789 | Érvényes hosszú értékek egyeztetései | minlength(érték) | {username:minlength(4)} | Rick | A láncsornak legalább 4 karakternek kell lennie | maxlength(érték) | {filename:maxlength(8)} | Richard | A láncsorok nem haladhatják meg 8 karaktert | hossz(hosszúság) | {filename:length(12)} | somefile.txt | A láncszálnak pontosan 12 karakterből kell állnia | hossz (min, max) | {filename:length(8,16)} | somefile.txt | A lánc legalább 8 karakterből álljon, és legfeljebb 16 karakterből állhat | min(érték) | {age:min(18)} | 19 | Az egész értéknek legalább 18-nak kell lennie | max(érték) | {age:max(120)} | 91 | Az egész szám nem haladhatja meg az 120-at | tartomány(min,max) | {age:range(18,120)} | 91 | Az egész szám értéknek legalább 18-nak kell lennie, és nem kell meghaladnia a 120-at | Alfa | {name:alpha} | Rick | A sorozatnak egy vagy több ábécé karakterből kell állnia (a-z, kis- és nagybetűs karakter). | regex kifejezés | {ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)} | 123-45-6789 | A láncsornak egyeznie kell a reguláris kifejezéssel (lásd a szabályos kifejezések meghatározásához vonatkozó tippeket) | szükséges | {name:required} | Rick | A nem paraméteres értékek jelenlétének érvényesítésére használják az URL generálása során |
A beépített korlátozások a legtöbb gyakori felhasználási esetnél működnek, de néha még mindig testreszabni kell a kívánt hatást.
Egyedi útvonalválasztási korlátozások
Egy egyedi korlátozás az IRouteConstraint interfész megvalósítása, majd túlterheljük a Match metódust, amelynek négy paramétere van.
Az első paraméter, a httpContext, a jelenlegi kérés kontextusa
A második paraméter, az útvonal, amelyhez a jelenlegi korlátozás tartozik
A harmadik paraméter, routeKey, a jelenleg ellenőrzött változó neve, például az id a cikk elején található példában A negyedik paraméterértékek az a szótári érték, amelyhez az aktuális URL egyezik, például a cikk elején szereplő példa útvonala, ha az URL users/1, akkor van egy szótár, amelynek kulcsa = azonosító , érték = 1. Természetesen vannak más változók értékei is, mint például kontroller, akció stb.
Az ötödik paraméter, a routeDirection, egy felsorolt érték, amely azt jelzi, hogy az URL-t a web kéri-e, vagy például az URL.Action által generált.
Például olyan korlátozást szeretnénk definiálni, amely megadja, hogy az útvonal által átadott paramétereknek a megadott felsorolási értéknek kell lenniük.
Először definiáljuk az enumot:
Ezután definiáljuk a korlátokat:
Egyedi korlátozások hozzáadása a ConfigureServices metódushoz Startup.cs-ben:
Útvonalakra vonatkozó korlátozások alkalmazása:
(A WebApplicationTest a jelenlegi névtér)
{id:int:min(2)} útvonalnak min(2) kell használnia, különben ütközés alakul ki az id = 0 vagy id = 1 között.
Futtatd a programot, és egyeztesd meg a saját korlátainkat, amikor az útvonalak API/test/0, API/test/1, API/test/true, és API/test/hamis.
Ha az útvonal api/test/{egész szám, nagyobb, mint 2}, egyeztess a második útvonalat.
Más esetek a harmadik úthoz hasonlóak.
következtetés
Az útvonali korlátozások egyes helyzetekben nagyon hasznosak lehetnek, amelyek csökkenthetik a vezérlő ellenőrzési paramétereit, és a részleges paraméter validálás funkciója deklaratív attruibute segítségével valósítható meg, valamint néhány duplikált ellenőrzés nyilvános használatra korlátozott korlátozásokba vonható ki.
A korlátozás konstruktora beinjektálható, így nagyon kiterjeszthető, és néhány paraméterellenőrzés is elvégezhető az adatbázis lekérdezésével.
A hivatalos weboldal csak röviden említi az útvonalválasztási korlátozásokat, és ez a cikk konkrét példákat mutat be az útvonal-korlátozások használatára.
|