Marsruutimispiirangud
ASP.NET Core'is saad URL-idele muutujaid edastada, määratledes marsruutimismallid, ning saad määrata vaikimisi, valikuvõimalusi ja piiranguid muutujatele.
Piirangut kasutatakse, lisades määratud piirangu nime atribuudi marsruudile, mida kasutatakse järgmiselt:
Mõned piirangud on raamistikus juba olemas, nagu järgmised:
Piirangud | näide | Näited matšidest | Illustreerida | int | {id:int} | 123456789, -123456789 | Sobita ükskõik milline täisarv | bool | {active:bool} | tõene, VÄÄR | Sobita tõene või vale (käänutundlik) | Kuupäev | {dob:datetime} | 2016-12-31, 2016-12-31 19:32 | Vastab kehtivatele DateTime väärtustele (fikseeritud lokaalis – vt hoiatust) | kümnendkomaa | {price:decimal} | 49.99, -1,000.01 | Vastab kehtivatele kümnendkohtadele (fikseeritud lokaalsus – vt hoiatus) | Kahekordne | {weight:double} | 1.234, -1,001.01e8 | Vastab kehtivatele topeltväärtustele (fikseeritud lokaalsus – vt hoiatus) | float | {weight:float} | 1.234, -1,001.01e8 | Vastab kehtivatele float-väärtustele (fikseeritud lokaalis – vt hoiatusi) | Guid | {id:guid} | CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638} | Sobivad kehtivad GUID-väärtused | pikk | {tiks:long} | 123456789, -123456789 | Sobivad kehtivad pikad väärtused | minlength(väärtus) | {kasutajanimi:minlength(4)} | Rick | String peab olema vähemalt 4 tähemärki | maxlength(väärtus) | {failinimi:maxlength(8)} | Richard | Stringid ei tohi ületada 8 märki | pikkus(pikkus) | {filename:length(12)} | somefile.txt | String peab olema täpselt 12 märki | pikkus (min,max) | {failinimi:pikkus(8,16)} | somefile.txt | String peab olema vähemalt 8 tähemärki ja mitte rohkem kui 16 märki | min(väärtus) | {age:min(18)} | 19 | Täisarvuline väärtus peab olema vähemalt 18 | max(väärtus) | {age:max(120)} | 91 | Täisarvuline väärtus ei tohi ületada 120 | ulatus (min,max) | {age:range(18,120)} | 91 | Täisarv peab olema vähemalt 18 ja mitte ületama 120 | Alpha | {name:alpha} | Rick | String peab koosnema ühest või mitmest tähestikulisest märgist (a-z, tähe-tundlik). | regex (väljend) | {ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)} | 123-45-6789 | String peab vastama regulaaravaldisele (vt näpunäiteid regulaaravaldiste määratlemiseks) | Nõutav | {nimi:vajalik} | Rick | Kasutatakse mitteparameetriliste väärtuste olemasolu tagamiseks URL-i genereerimisel |
Sisseehitatud piirangud toimivad enamiku tavapäraste kasutusjuhtude puhul, kuid mõnikord tuleb siiski soovitud efekti kohandada.
Kohandatud marsruutimise piirangud
Kohandatud piirang on IRouteConstraint liidese rakendamine ja seejärel Match-meetodi ülekoormamine, millel on neli parameetrit.
Esimene parameeter, httpContext, on praeguse päringu kontekst
Teine parameeter, marsruut, on marsruut, millele praegune piirang kuulub
Kolmas parameeter, routeKey, on hetkel kontrollitud muutuja nimi, näiteks id artikli alguses toodud näites Neljas parameetri väärtus on sõnastiku väärtus, millega praegune URL vastab, näiteks näite marsruut artikli alguses; kui URL on users/1, siis on olemas sõnastik, mille võti = id , väärtus = 1. Loomulikult on olemas ka väärtused teiste muutujate jaoks, nagu kontroller, tegevus jne.
Viies parameeter, routeDirection, on loetletud väärtus, mis näitab, kas URL-i taotleb veebis või genereerib meetod nagu Url.Action.
Näiteks soovime defineerida piirangu, mis määrab, et marsruudi kaudu läbitud parameetrid peavad olema määratud loendusväärtus.
Defineerime kõigepealt enum'i:
Seejärel defineerime piirangud:
Lisa ConfigureServices meetodile kohandatud piirangud Startup.cs:
Marsruutide piirangute kasutamine:
(WebApplicationTest on praegune nimeruum)
{id:int:min(2)} marsruut peab kasutama min(2), vastasel juhul tekib konflikt id = 0 või id = 1 vahel.
Käivita programm ja vasta meie kohandatud piirangutele, kui marsruudid on api/test/0, api/test/1, api/test/true ja api/test/väär.
Kui marsruut on api/test/{täisarv suurem kui 2}, sobitage teine marsruut.
Teised juhtumid sobivad kolmandale teele.
Järeldus
Marsruutimispiirangud on mõnes olukorras väga kasulik funktsioon, mis võib vähendada kontrollparameetreid kontrolleris, ning osalise parameetrite valideerimise funktsiooni saab rakendada deklaratiivse attruibute'i abil ning mõningaid dõltsitud kontrolle saab avalikuks kasutamiseks piirangutesse eraldada.
Piirangu konstruktorit saab süstida, nii et see on väga laiendatav, ning mõningaid parameetrite verifitseerimist saab teha andmebaasi päringute kaudu.
Ametlik veebileht mainib marsruutimispiiranguid vaid lühidalt ning see artikkel toob konkreetseid näiteid marsruutimispiirangute kasutamisest.
|