Routing-Einschränkungen
ASP.NET Core kann man Variablen auf URLs übertragen, indem man Routing-Vorlagen definiert, und man kann Standard-, optionale und Einschränkungen für Variablen bereitstellen.
Die Constraint wird verwendet, indem der angegebene Constraint-Name zur Attributroute hinzugefügt wird, die wie folgt verwendet wird:
Einige Einschränkungen sind bereits im Rahmen bereitgestellt, wie folgt:
Einschränkungen | Beispiel | Beispiele für Matches | illustrieren | Int | {id:int} | 123456789, -123456789 | Gleiche eine beliebige ganze Zahl an | Bool | {aktiv:bool} | wahr, FALSCH | True oder False übereinstimmen (groß- und kleinschreibungssensitiv) | Termin | {dob:datetime} | 31.12.2016, 31.12.2016 19:32 Uhr | Stimmt mit gültigen DateTime-Werten überein (in fester Lokalität – siehe Warnung) | Dezimalzumessung | {price:dezimal} | 49.99, -1,000.01 | Entspricht gültigen Dezimalwerten (in fester Lokalität – siehe Warnung) | Double | {weight:double} | 1,234, -1.001,01e8 | Übereinstimmung mit gültigen Doppelwerten (in fester Lokalität – siehe Warnung) | schweben | {gewicht:schwimmen} | 1,234, -1.001,01e8 | Entspricht gültigen Float-Werten (in fester Lokalität – siehe Warnungen) | guid | {id:guid} | CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638} | Entspricht gültigen GUID-Werten | lang | {ticks:lang} | 123456789, -123456789 | Übereinstimmung mit gültigen Long-Werten | minlength(wert) | {username:minlength(4)} | Rick | Die Zeichenkette muss mindestens 4 Zeichen umfassen | maxlength(value) | {filename:maxlength(8)} | Richard | Zeichenketten dürfen 8 Zeichen nicht überschreiten | Länge(Länge) | {filename:length(12)} | somefile.txt | Die Zeichenkette muss genau 12 Zeichen umfassen | length(min,max) | {filename:length(8,16)} | somefile.txt | Die Zeichenkette muss mindestens 8 Zeichen und nicht mehr als 16 Zeichen umfassen | min(value) | {age:min(18)} | 19 | Der ganzzahlige Wert muss mindestens 18 betragen | max(value) | {age:max(120)} | 91 | Der ganzzahlige Wert darf 120 nicht überschreiten | Reichweite(min,max) | {age:range(18,120)} | 91 | Der ganzzahlige Wert muss mindestens 18 betragen und darf 120 nicht überschreiten | Alpha | {name:alpha} | Rick | Die Zeichenkette muss aus einem oder mehreren alphabetischen Zeichen bestehen (a-z, groß- und kleinschreibungssensitiv). | regex(Ausdruck) | {ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)} | 123-45-6789 | Die Zeichenkette muss mit dem regulären Ausdruck übereinstimmen (siehe Tipps zur Definition regulärer Ausdrücke) | Erforderlich | {name:erforderlich} | Rick | Wird verwendet, um das Vorhandensein nichtparametrischer Werte während der URL-Generierung zu erzwingen. |
Die eingebauten Einschränkungen funktionieren für die meisten gängigen Anwendungsfälle, aber manchmal müssen wir trotzdem den gewünschten Effekt anpassen.
Benutzerdefinierte Routing-Einschränkungen
Eine benutzerdefinierte Einschränkung besteht darin, die IRouteConstraint-Schnittstelle zu implementieren und dann die Match-Methode zu überladen, die vier Parameter hat.
Der erste Parameter, httpContext, ist der Kontext der aktuellen Anfrage
Der zweite Parameter, die Route, ist die Route, zu der die aktuelle Nebenbedingung gehört
Der dritte Parameter, routeKey, ist der Name der aktuell überprüften Variablen, wie z. B. id im Beispiel am Anfang des Artikels Die vierten Parameterwerte sind der Wörterbuchwert, mit dem die aktuelle URL übereinstimmt, wie zum Beispiel die Route des Beispiels am Anfang des Artikels. Wenn die URL users/1 ist, gibt es ein Wörterbuch mit Schlüssel = id , Wert = 1. Natürlich gibt es auch Werte für andere Variablen, wie Controller, Action usw.
Der fünfte Parameter, routeDirection, ist ein aufgezählter Wert, der angibt, ob die URL vom Web angefordert oder von einer Methode wie Url.Action generiert wird.
Zum Beispiel wollen wir eine Nebenbedingung definieren, die angibt, dass die von der Route übergebenen Parameter der angegebene Aufzählungswert sein müssen.
Definieren wir zuerst ein Enum:
Dann definieren Sie die Nebenbedingungen:
Fügen Sie der ConfigureServices-Methode in Startup.cs benutzerdefinierte Einschränkungen hinzu:
Verwendung von Einschränkungen auf Routen:
(WebApplicationTest ist der aktuelle Namensraum)
{id:int:min(2)} Route muss min(2) verwenden, andernfalls gibt es einen Konflikt bei id = 0 oder id = 1.
Führe das Programm aus und passe unsere benutzerdefinierten Einschränkungen an, wenn die Routen api/test/0, api/test/1, api/test/true und api/test/false sind.
Wenn die Route api/test/{ganzzahliger größer als 2} ist, gleichen Sie die zweite Route ab.
Andere Fälle entsprechen dem dritten Weg.
Schlussfolgerung
Routing-Constraints sind in manchen Szenarien eine sehr nützliche Funktion, die die Prüfparameter im Controller reduzieren kann, und die Funktion der partiellen Parametervalidierung kann mit deklarativer Attruibute implementiert werden; einige doppelte Prüfungen können in Constraints für die öffentliche Nutzung extrahiert werden.
Der Konstruktor der Constraint kann eingeschleust werden, sodass er sehr erweiterbar ist, und einige Parameterverifizierungen können durch Abfrage der Datenbank durchgeführt werden.
Die offizielle Website erwähnt nur kurz Routing-Constraints, und dieser Artikel bietet konkrete Beispiele für die Verwendung von Routing-Constraints.
|