Rutingsbegrensninger
ASP.NET Core kan du sende variabler på URL-er ved å definere rutingmaler, og du kan gi standardinnstillinger, valgfrie og begrensninger for variabler.
Begrensningen brukes ved å legge til det angitte begrensningsnavnet til attributtruten, som brukes som følger:
Noen begrensninger er allerede gitt i rammeverket, som følger:
Begrensninger | eksempel | Eksempler på kamper | illustrere | Int | {id:int} | 123456789, -123456789 | Match et hvilket som helst heltall | Bool | {active:bool} | Sant, FALSKT | Match true or false (kasusfølsom) | Datotid | {dob:datetime} | 2016-12-31, 2016-12-31 19:32 | Matcher gyldige DateTime-verdier (i fast lokalitet – se advarsel) | Desimalnummer | {price:decimal} | 49.99, -1,000.01 | Matcher gyldige desimalverdier (i fast lokalitet – se advarsel) | Dobbel | {vekt:dobbel} | 1,234, -1 001,01e8 | Matcher gyldige doble verdier (i fast lokalitet – se advarsel) | Float | {vekt:flyt} | 1,234, -1 001,01e8 | Matcher gyldige flyttalverdier (i fast lokalitet – se advarsler) | guid | {id:guid} | CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638} | Matcher gyldige GUID-verdier | lang | {tikker: lang} | 123456789, -123456789 | Matcher gyldige lange verdier | minlength(verdi) | {username:minlength(4)} | Rick | Strengen må være minst 4 tegn | Maxlength(verdi) | {filnavn:maxlength(8)} | Richard | Strenger må ikke overstige 8 tegn | Lengde(lengde) | {filnavn:lengde(12)} | somefile.txt | Strengen må være nøyaktig 12 tegn | lengde(min,maks) | {filnavn:lengde(8,16)} | somefile.txt | Strengen må være minst 8 tegn og ikke mer enn 16 tegn | min(value) | {alder:min(18)} | 19 | Heltalsverdien må være minst 18 | max(verdi) | {age:max(120)} | 91 | Heltalsverdien må ikke overstige 120 | Rekkevidde(min,maks) | {age:range(18,120)} | 91 | Heltalsverdien må være minst 18 og ikke overstige 120 | Alpha | {name:alpha} | Rick | Strengen må bestå av ett eller flere alfabetiske tegn (a-z, kasussensitive). | regex (uttrykk) | {ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)} | 123-45-6789 | Strengen må samsvare med det regulære uttrykket (se tips for å definere regulære uttrykk) | påkrevd | {name:required} | Rick | Brukes for å håndheve tilstedeværelsen av ikke-parametriske verdier under URL-generering |
De innebygde begrensningene fungerer for de fleste vanlige brukstilfeller, men noen ganger må vi fortsatt tilpasse effekten vi ønsker.
Egendefinerte rutingsbegrensninger
En tilpasset begrensning er å implementere IRouteConstraint-grensesnittet og deretter overbelaste Match-metoden, som har fire parametere.
Den første parameteren, httpContext, er konteksten til den nåværende forespørselen
Den andre parameteren, ruten, er ruten som den nåværende begrensningen tilhører
Den tredje parameteren, routeKey, er navnet på variabelen som for øyeblikket sjekkes, slik som id i eksempelet i begynnelsen av artikkelen De fjerde parameterverdiene er ordboksverdien som den nåværende URL-en matcher, for eksempel ruten til eksempelet i begynnelsen av artikkelen; hvis URL-en er users/1, finnes det en ordbok med nøkkel = id , verdi = 1. Selvfølgelig finnes det også verdier for andre variabler, som kontroller, handling, osv.
Den femte parameteren, routeDirection, er en opplistet verdi som angir om URL-en forespørres av nettet eller genereres av en metode som Url.Action.
For eksempel ønsker vi å definere en begrensning som spesifiserer at parameterne som passeres av ruten må være den angitte oppramsningsverdien.
La oss definere et enum først:
Definer deretter begrensningene:
Legg til tilpassede begrensninger i ConfigureServices-metoden i Startup.cs:
Bruk av begrensninger på ruter:
(WebApplicationTest er det nåværende navnerommet)
{id:int:min(2)}-ruten må bruke min(2), ellers vil det oppstå konflikt om id = 0 eller id = 1.
Kjør programmet og matcher våre egendefinerte begrensninger når rutene er api/test/0, api/test/1, api/test/true og api/test/false.
Hvis ruten er api/test/{heltall større enn 2}, match den andre ruten.
Andre tilfeller samsvarer med den tredje ruten.
konklusjon
Routingbegrensninger er en svært nyttig funksjon i noen scenarioer, som kan redusere sjekkparameterne i kontrolleren, og funksjonen til delvis parametervalidering kan implementeres ved deklarativ attruibute, og noen duplikatkontroller kan trekkes ut til begrensninger for offentlig bruk.
Konstruktøren av begrensningen kan injisere, så den kan være svært utvidbar, og noe parameterverifisering kan gjøres ved å spørre databasen.
Den offisielle nettsiden nevner bare kort rutingbegrensninger, og denne artikkelen gir spesifikke eksempler på bruk av rutingsbegrensninger.
|