Routingbegrænsninger
ASP.NET Core kan du sende variabler på URL'er ved at definere routing-skabeloner, og du kan give standardindstillinger, valgmuligheder og begrænsninger for variabler.
Begrænsningen bruges ved at tilføje det specificerede begrænsningsnavn til attributruten, som bruges som følger:
Nogle begrænsninger er allerede angivet i rammen, som følger:
Begrænsninger | eksempel | Eksempler på kampe | illustrere | int | {id:int} | 123456789, -123456789 | Match et vilkårligt heltal | Bool | {aktiv:bool} | sandt, falsk | Match sand eller falsk (kasusfølsom) | Datotidspunkt | {dob:datetime} | 2016-12-31, 2016-12-31 19:32 | Matcher gyldige DateTime-værdier (i fast lokalitet - se advarsel) | Decimal | {price:decimal} | 49.99, -1,000.01 | Matcher gyldige decimalværdier (i fast lokalitet - se advarsel) | Dobbelt | {vægt:dobbelt} | 1,234, -1.001,01e8 | Matcher gyldige dobbeltværdier (i fast lokalitet - se advarsel) | Float | {vægt:flyd} | 1,234, -1.001,01e8 | Matcher gyldige float-værdier (i fast lokalitet - se advarsler) | guid | {id:guid} | CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638} | Matcher gyldige GUID-værdier | Lang | {tikker: lang} | 123456789, -123456789 | Matches gyldige lange værdier | minlength(værdi) | {brugernavn:minlength(4)} | Rick | Strengen skal være mindst 4 tegn | maxlength(værdi) | {filnavn:maxlength(8)} | Richard | Strenge må ikke overstige 8 tegn | længde(længde) | {filnavn:længde(12)} | somefile.txt | Strengen skal være præcis 12 tegn | længde(min,max) | {filnavn:længde(8,16)} | somefile.txt | Strengen skal være mindst 8 tegn og højst 16 tegn | min(værdi) | {age:min(18)} | 19 | Heltalsværdien skal være mindst 18 | max(værdi) | {age:max(120)} | 91 | Heltalsværdien må ikke overstige 120 | Afstand(min,max) | {age:range(18,120)} | 91 | Heltalsværdien må være mindst 18 og ikke overstige 120 | Alpha | {name:alpha} | Rick | Strengen skal bestå af et eller flere alfabetiske tegn (a-z, kasusfølsom). | regex(udtryk) | {ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)} | 123-45-6789 | Strengen skal matche det regulære udtryk (se tips til definition af regulære udtryk) | Kræves | {name:required} | Rick | Bruges til at håndhæve tilstedeværelsen af ikke-parametriske værdier under URL-generering |
De indbyggede begrænsninger fungerer til de fleste almindelige anvendelsestilfælde, men nogle gange skal vi stadig tilpasse den ønskede effekt.
Brugerdefinerede routingbegrænsninger
En brugerdefineret begrænsning er at implementere IRouteConstraint-grænsefladen og derefter overbelaste Match-metoden, som har fire parametre.
Den første parameter, httpContext, er konteksten for den aktuelle anmodning
Den anden parameter, ruten, er den rute, som den nuværende begrænsning hører til
Den tredje parameter, routeKey, er navnet på den variabel, der aktuelt er tjekket, såsom id i eksemplet i begyndelsen af artiklen Den fjerde parameterværdi er den ordbogsværdi, som den aktuelle URL matcher, såsom ruten for eksemplet i begyndelsen af artiklen; hvis URL'en er users/1, findes der en ordbog med nøgle = id , værdi = 1. Selvfølgelig er der også værdier for andre variable, såsom controller, action osv.
Den femte parameter, routeDirection, er en opregnet værdi, der angiver, om URL'en er anmodet af webben eller genereret af en metode som Url.Action.
For eksempel ønsker vi at definere en begrænsning, der specificerer, at de parametre, ruten passerer, skal være den angivne opramningsværdi.
Lad os først definere et enum:
Definér derefter begrænsningerne:
Tilføj brugerdefinerede begrænsninger til ConfigureServices-metoden i Startup.cs:
Brug af begrænsninger på ruter:
(WebApplicationTest er det nuværende navnerum)
{id:int:min(2)} ruten skal bruge min(2), ellers vil der opstå en konflikt om id = 0 eller id = 1.
Kør programmet og match vores brugerdefinerede begrænsninger, når ruterne er api/test/0, api/test/1, api/test/true og api/test/false.
Hvis ruten er api/test/{heltal større end 2}, match den anden rute.
Andre tilfælde matcher den tredje rute.
konklusion
Routing-begrænsninger er en meget nyttig funktion i nogle scenarier, som kan reducere kontrolparametrene i controlleren, og funktionen med delvis parametervalidering kan implementeres ved deklarativ attruibute, og nogle duplikerede kontroller kan udtrækkes til begrænsninger til offentlig brug.
Konstruktøren af begrænsningen kan injiceres, så den kan være meget udvidelig, og noget parameterverifikation kan udføres ved at forespørge databasen.
Den officielle hjemmeside nævner kun kort routingbegrænsninger, og denne artikel giver specifikke eksempler på brugen af routingbegrænsninger.
|