Maršruto parinkimo apribojimai
ASP.NET "Core" galite perduoti kintamuosius URL apibrėždami maršruto parinkimo šablonus ir pateikti numatytuosius, pasirenkamus ir kintamųjų apribojimus.
Apribojimas naudojamas pridedant nurodytą apribojimo pavadinimą į atributo maršrutą, kuris naudojamas taip:
Kai kurie apribojimai jau numatyti sistemoje:
Apribojimai | pavyzdys | Rungtynių pavyzdžiai | Iliustruoti | int | {id:int} | 123456789, -123456789 | Atitikti bet kurį sveikąjį skaičių | bool | {aktyvus:bool} | true, FALSE | Atitikti teisingą arba klaidingą (skiriamos didžiosios ir mažosios raidės) | data ir laikas | {dob:datetime} | 2016-12-31, 2016-12-31 19:32 | Atitinka galiojančias DateTime reikšmes (fiksuotoje vietoje - žr. įspėjimą) | dešimtainis | {kaina:dešimtainė} | 49.99, -1,000.01 | Atitinka galiojančias dešimtaines reikšmes (fiksuotoje vietoje - žr. įspėjimą) | dvigubas | {svoris:dvigubas} | 1,234, -1,001,01e8 | Atitinka galiojančias dvigubas reikšmes (fiksuotoje vietoje - žr. įspėjimą) | plūdė | {svoris:plūduriuojantis} | 1,234, -1,001,01e8 | Atitinka galiojančias plūduriuojančias reikšmes (fiksuotoje vietoje - žr. įspėjimus) | GUID | {id:guid} | CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638} | Atitinka galiojančias GUID reikšmes | ilgas | {erkės:ilgas} | 123456789, -123456789 | Atitinka galiojančias ilgąsias reikšmes | minlength(reikšmė) | {vartotojo vardas:minlength(4)} | Rikas | Eilutę turi sudaryti ne mažiau kaip 4 simboliai | maxlength(reikšmė) | {failo pavadinimas:maxlength(8)} | Ričardas | Eilutės neturi viršyti 8 simbolių | ilgis (ilgis) | {failo pavadinimas:ilgis(12)} | somefile.txt | Eilutė turi būti lygiai 12 simbolių | Ilgis (min., maks.) | {failo pavadinimas:ilgis(8,16)} | somefile.txt | Eilutę turi sudaryti ne mažiau kaip 8 simboliai ir ne daugiau kaip 16 simbolių | min(reikšmė) | {amžius:min(18)} | 19 | Sveikojo skaičiaus reikšmė turi būti ne mažesnė kaip 18 | max(reikšmė) | {amžius:maks.(120)} | 91 | Sveikojo skaičiaus reikšmė neturi viršyti 120 | diapazonas (min., maks.) | {amžius:diapazonas(18,120)} | 91 | Sveikasis skaičius turi būti ne mažesnis kaip 18 ir ne didesnis kaip 120 | alfa | {vardas:alfa} | Rikas | Eilutę turi sudaryti vienas ar keli abėcėlės simboliai (a-z, skiriamos didžiosios ir mažosios raidės). | regex(išraiška) | {ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)} | 123-45-6789 | Eilutė turi atitikti reguliariąją išraišką (žr. patarimus, kaip apibrėžti reguliariąsias išraiškas) | reikalingas | {vardas:būtina} | Rikas | Naudojamas neparametrinių reikšmių buvimui generuojant URL |
Integruoti apribojimai tinka dažniausiai pasitaikantiems naudojimo atvejams, tačiau kartais vis tiek turime pritaikyti norimą efektą.
Pasirinktiniai maršruto parinkimo apribojimai
Pasirinktinis apribojimas yra įdiegti IRouteConstraint sąsają ir tada perkrauti Match metodą, kuris turi keturis parametrus.
Pirmasis parametras httpContext yra dabartinės užklausos kontekstas
Antrasis parametras maršrutas yra maršrutas, kuriam priklauso dabartinis apribojimas
Trečiasis parametras, routeKey, yra šiuo metu tikrinamo kintamojo pavadinimas, pvz., id pavyzdyje straipsnio pradžioje Ketvirtoji parametro reikšmė yra žodyno reikšmė, kurią atitinka dabartinis URL, pvz., pavyzdžio maršrutas straipsnio pradžioje, jei URL yra vartotojai/1, tada yra žodynas su raktu = id , reikšmė = 1. Žinoma, yra ir kitų kintamųjų, tokių kaip valdiklis, veiksmas ir kt., reikšmių.
Penktasis parametras routeDirection yra išvardinta reikšmė, nurodanti, ar URL užklausą pateikia žiniatinklis, ar sugeneruoja metodas, pvz., Url.Action.
Pavyzdžiui, norime apibrėžti apribojimą, nurodantį, kad maršruto perduodami parametrai turi būti nurodyta išvardijimo vertė.
Pirmiausia apibrėžkime išvardijimą:
Tada apibrėžkite apribojimus:
Įtraukite pasirinktinius apribojimus į ConfigureServices metodą Startup.cs:
Maršrutų apribojimų naudojimas:
(WebApplicationTest yra dabartinė vardų sritis)
{id:int:min(2)} maršrutas turi naudoti min(2), kitaip kils konfliktas dėl id = 0 arba id = 1.
Paleiskite programą ir atitikti mūsų pasirinktinius apribojimus, kai maršrutai yra api/test/0, api/test/1, api/test/true ir api/test/false.
Jei maršrutas yra api/test/{sveikasis skaičius didesnis nei 2}, suderinkite antrąjį maršrutą.
Kiti atvejai atitinka trečiąjį kelią.
Išvada
Maršruto parinkimo apribojimai yra labai naudinga funkcija kai kuriuose scenarijuose, kurie gali sumažinti kontrolės parametrus valdiklyje, o dalinio parametrų patvirtinimo funkcija gali būti įgyvendinta naudojant deklaratyvų attruibute, o kai kurie pasikartojantys patikrinimai gali būti išgauti į apribojimus viešam naudojimui.
Apribojimo konstruktorius gali būti įterptas, todėl jis gali būti labai išplečiamas, o kai kuriuos parametrus galima patikrinti užklausiant duomenų bazę.
Oficialioje svetainėje tik trumpai paminėti maršruto parinkimo apribojimai, o šiame straipsnyje pateikiami konkretūs maršruto parinkimo apribojimų naudojimo pavyzdžiai.
|