Ruttningsbegränsningar
ASP.NET Core kan du skicka variabler på URL:er genom att definiera routingmallar, och du kan tillhandahålla standardinställningar, valbara variabler och begränsningar.
Begränsningen används genom att lägga till det specificerade begränsningsnamnet till attributrutten, som används enligt följande:
Vissa begränsningar finns redan i ramverket, enligt följande:
Begränsningar | exempel | Exempel på matcher | illustrera | int | {id:int} | 123456789, -123456789 | Matcha vilket heltal som helst | Bool | {aktiv:bool} | Sant, FALSKT | Matcha sant eller falskt (kasuskänsligt) | Datumtid | {dob:datetime} | 2016-12-31, 2016-12-31 19:32 | Matchar giltiga DateTime-värden (i fast lokal miljö – se varning) | Decimal | {price:decimal} | 49.99, -1,000.01 | Matchar giltiga decimalvärden (i fast lokalitet – se varning) | dubbel | {vikt:dubbel} | 1,234, -1 001,01e8 | Matchar giltiga dubbla värden (i fast lokalitet – se varning) | Flott | {vikt:flyt} | 1,234, -1 001,01e8 | Matchar giltiga flyttalvärden (i fast lokalitet – se varningar) | guid | {id:guid} | CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638} | Matchar giltiga GUID-värden | Lång | {ticks:long} | 123456789, -123456789 | Matchar giltiga långa värden | minlength(value) | {username:minlength(4)} | Rick | Strängen måste vara minst 4 tecken | maxlength(värde) | {filnamn:maxlength(8)} | Richard | Strängar får inte överstiga 8 tecken | längd(längd) | {filnamn:längd(12)} | somefile.txt | Strängen måste vara exakt 12 tecken lång | längd(min,max) | {filnamn:length(8,16)} | somefile.txt | Strängen måste vara minst 8 tecken och högst 16 tecken | min(value) | {age:min(18)} | 19 | Heltalsvärdet måste vara minst 18 | max(värde) | {age:max(120)} | 91 | Heltalsvärdet får inte överstiga 120 | Räckvidd(min,max) | {ålder:intervall(18 120)} | 91 | Heltalsvärdet måste vara minst 18 och inte överstiga 120 | Alpha | {name:alpha} | Rick | Strängen måste bestå av en eller flera alfabetiska tecken (a–z, kasuskänsliga). | regex (uttryck) | {ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)} | 123-45-6789 | Strängen måste matcha det reguljära uttrycket (se tips om definition av reguljära uttryck) | krävs | {name:required} | Rick | Används för att upprätthålla närvaron av icke-parametriska värden under URL-generering |
De inbyggda begränsningarna fungerar för de flesta vanliga användningsområden, men ibland måste vi ändå anpassa den effekt vi vill ha.
Anpassade routningsbegränsningar
En anpassad begränsning är att implementera IRouteConstraint-gränssnittet och sedan överbelasta Match-metoden, som har fyra parametrar.
Den första parametern, httpContext, är kontexten för den aktuella förfrågan
Den andra parametern, rutt, är den rutt som den aktuella begränsningen tillhör
Den tredje parametern, routeKey, är namnet på den variabel som för närvarande kontrolleras, såsom id i exemplet i början av artikeln Det fjärde parametervärdet är det ordboksvärde som den aktuella URL:en matchar, såsom rutten för exemplet i början av artikeln, om URL:en är users/1, finns det en ordbok med nyckel = id , värde = 1. Självklart finns det också värden för andra variabler, som controller, action osv.
Den femte parametern, routeDirection, är ett uppräknat värde som anger om URL:en efterfrågas av webben eller genereras av en metod som Url.Action.
Till exempel vill vi definiera en begränsning som specificerar att parametrarna som passeras av rutten måste vara det angivna uppräkningsvärdet.
Låt oss definiera ett enum först:
Definiera sedan begränsningarna:
Lägg till anpassade begränsningar i ConfigureServices-metoden i Startup.cs:
Användning av begränsningar på rutter:
(WebApplicationTest är det nuvarande namnrymden)
{id:int:min(2)} rutten måste använda min(2), annars uppstår en konflikt för id = 0 eller id = 1.
Kör programmet och matcha våra anpassade begränsningar när rutterna är api/test/0, api/test/1, api/test/true och api/test/false.
Om rutten är api/test/{heltal större än 2}, matcha den andra rutten.
Andra fall stämmer överens med den tredje vägen.
slutsats
Routingbegränsningar är en mycket användbar funktion i vissa scenarier, vilket kan minska kontrollparametrarna i kontrollern, och funktionen partiell parametervalidering kan implementeras med deklarativ attruibute, och vissa dubblettkontroller kan extraheras till begränsningar för allmänhetens användning.
Konstruktorn av begränsning kan injiceras, så den kan vara mycket utbyggbar, och viss parameterverifiering kan göras genom att fråga databasen.
Den officiella webbplatsen nämner bara kort routningsbegränsningar, och denna artikel ger specifika exempel på användningen av routningsbegränsningar.
|