Routingbeperkingen
ASP.NET Core kun je variabelen doorgeven aan URL's door routeringstemplates te definiëren, en je kunt standaardinstellingen, optionele en beperkingen voor variabelen geven.
De beperking wordt gebruikt door de gespecificeerde beperkingsnaam toe te voegen aan de attribuutroute, die als volgt wordt gebruikt:
Enkele beperkingen zijn al binnen het raamwerk gegeven, als volgt:
Beperkingen | voorbeeld | Voorbeelden van wedstrijden | illustreren | int | {id:int} | 123456789, -123456789 | Match elk geheel getal | Bool | {active:bool} | waar, VALS | Match waar of onwaar (hoofdlettergevoelig) | Datum en tijd | {dob:datetime} | 2016-12-31, 2016-12-31 19:32 | Komt overeen met geldige DateTime-waarden (in vaste locatie - zie waarschuwing) | Decimale | {price:decimaal} | 49.99, -1,000.01 | Komt overeen met geldige decimale waarden (in vaste locatie - zie waarschuwing) | Dubbel | {gewicht:dubbel} | 1,234, -1.001,01e8 | Komt overeen met geldige dubbele waarden (in vaste locatie - zie waarschuwing) | Float | {gewicht:float} | 1,234, -1.001,01e8 | Komt overeen met geldige floatwaarden (in vaste lokaliteit - zie waarschuwingen) | Guid | {id:guid} | CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638} | Komt overeen met geldige GUID-waarden | lang | {tikt:lang} | 123456789, -123456789 | Matcht geldige lange waarden | minlength(waarde) | {gebruikersnaam:minlength(4)} | Rick | De string moet minstens 4 tekens hebben | maxlength(waarde) | {bestandsnaam:maxlength(8)} | Richard | Strings mogen niet langer zijn dan 8 tekens | lengte(lengte) | {bestandsnaam:lengte(12)} | somefile.txt | De string moet precies 12 tekens zijn | lengte(min,max) | {bestandsnaam:lengte(8,16)} | somefile.txt | De string moet minstens 8 tekens zijn en niet meer dan 16 tekens | min(value) | {leeftijd:min(18)} | 19 | De geheel getal moet minstens 18 zijn | max(waarde) | {leeftijd:max(120)} | 91 | De gehele getalwaarde mag niet groter zijn dan 120 | Bereik(min,max) | {leeftijd:bereik(18.120)} | 91 | De gehele getalwaarde moet minstens 18 zijn en niet hoger zijn dan 120 | alpha | {naam:alpha} | Rick | De string moet bestaan uit één of meer alfabetische tekens (a-z, hoofdlettergevoelig). | regex(uitdrukking) | {ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)} | 123-45-6789 | De string moet overeenkomen met de reguliere expressie (zie tips over het definiëren van reguliere expressies) | Vereist | {naam:vereist} | Rick | Gebruikt om de aanwezigheid van niet-parametrische waarden tijdens URL-generatie af te dwingen |
De ingebouwde beperkingen werken voor de meeste veelvoorkomende gebruikssituaties, maar soms moeten we toch het gewenste effect aanpassen.
Aangepaste routeringsbeperkingen
Een aangepaste beperking is het implementeren van de IRouteConstraint-interface en vervolgens de Match-methode overbelasten, die vier parameters heeft.
De eerste parameter, httpContext, is de context van het huidige verzoek
De tweede parameter, route, is de route waartoe de huidige beperking behoort
De derde parameter, routeKey, is de naam van de variabele die momenteel wordt gecontroleerd, zoals id in het voorbeeld aan het begin van het artikel De vierde parameterwaarden zijn de woordenboekwaarde die de huidige URL overeenkomt, zoals de route van het voorbeeld aan het begin van het artikel; als de URL users/1 is, dan is er een woordenboek met key = id , waarde = 1. Natuurlijk zijn er ook waarden voor andere variabelen, zoals controller, actie, enzovoort.
De vijfde parameter, routeDirection, is een opgesomde waarde die aangeeft of de URL wordt opgevraagd door het web of wordt gegenereerd door een methode zoals Url.Action.
We willen bijvoorbeeld een beperking definiëren die specificeert dat de parameters die door de route worden doorgegeven de gespecificeerde enumeratiewaarde moeten zijn.
Laten we eerst een enum definiëren:
Definieer dan de beperkingen:
Voeg aangepaste beperkingen toe aan de ConfigureServices-methode in Startup.cs:
Gebruik van beperkingen op routes:
(WebApplicationTest is de huidige naamruimte)
{id:int:min(2)} route moet min(2) gebruiken, anders is er een conflict voor id = 0 of id = 1.
Voer het programma uit en match onze aangepaste constraints wanneer de routes api/test/0, api/test/1, api/test/true en api/test/false zijn.
Als de route api/test/{integer groter dan 2} is, match dan de tweede route.
Andere gevallen komen overeen met de derde route.
conclusie
Routingbeperkingen zijn in sommige scenario's een zeer nuttige functie, die de controleparameters in de controller kunnen verminderen, en de functie van gedeeltelijke parametervalidatie kan worden geïmplementeerd met declaratieve attruibute, en sommige dubbele controles kunnen worden uitgepakt tot constraints voor openbaar gebruik.
De constructor van de constraint kan worden geïnjecteerd, waardoor deze zeer uitbreidbaar is, en enige parameterverificatie kan worden uitgevoerd door de database te bevragen.
De officiële website noemt routeringsbeperkingen slechts kort, en dit artikel geeft specifieke voorbeelden van het gebruik van routeringsbeperkingen.
|