Kurse:Routing: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „'''Einführung in Routing''' Routing ist ein Prozess, bei dem eingehende HTTP-Anfragen durch Überprüfung der HTTP-Methode und der URL abgeglichen und dann entsprechende Endpunkte aufgerufen werden. == Routing - UseRouting und UseEndPoints == === UseRouting( ) === <pre> app.UseRouting(); </pre> Aktiviert das Routing und wählt einen passenden Endpunkt basierend auf dem URL-Pfad und der HTTP-Methode aus. === UseEndPoints( ) === <pre> app.Use…“ |
(kein Unterschied)
|
Aktuelle Version vom 23. Juni 2025, 09:02 Uhr
Einführung in Routing Routing ist ein Prozess, bei dem eingehende HTTP-Anfragen durch Überprüfung der HTTP-Methode und der URL abgeglichen und dann entsprechende Endpunkte aufgerufen werden.
Routing - UseRouting und UseEndPoints
UseRouting( )
<pre> app.UseRouting(); </pre>
Aktiviert das Routing und wählt einen passenden Endpunkt basierend auf dem URL-Pfad und der HTTP-Methode aus.
UseEndPoints( )
<pre> app.UseEndPoints(endpoints => { endpoints.Map(…); endpoints.MapGet(…); endpoints.MapPost(…); ); </pre>
Führt den passenden Endpunkt aus, der von der obigen Methode UseRouting() ausgewählt wurde.
Map, MapGet, MapPost
endpoints.Map( )
<pre> endpoints.Map("path", async (HttpContext context) => { //code }); </pre>
Führt den Endpunkt aus, wenn der URL-Pfad einer HTTP-Anfrage mit dem angegebenen Pfad beginnt.
endpoints.MapGet( )
<pre> endpoints.MapGet("path", async (HttpContext context) => { //code }); </pre>
Führt den Endpunkt aus, wenn der URL-Pfad einer HTTP-GET-Anfrage mit dem angegebenen Pfad beginnt.
endpoints.MapPost( )
<pre> endpoints.MapPost("path", async (HttpContext context) => { //code }); </pre>
Führt den Endpunkt aus, wenn der URL-Pfad einer HTTP-POST-Anfrage mit dem angegebenen Pfad beginnt.
GetEndpoint( )
<pre> context.GetEndpoint(); </pre>
Gibt eine Instanz des Typs Microsoft.AspNetCore.Http.Endpoint zurück, die einen Endpunkt darstellt. Diese Instanz enthält zwei wichtige Eigenschaften: DisplayName, RequestDelegate.
Routenparameter
<pre> "{parameter}" </pre>
Ein Routenparameter kann mit jedem beliebigen Wert übereinstimmen.
Standard-Routenparameter
<pre> "{parameter=default_value}" </pre>
Ein Routenparameter mit einem Standardwert passt auf jeden beliebigen Wert. Er passt auch auf einen leeren Wert. In diesem Fall wird der Standardwert für den Parameter verwendet.
Optionale Routenparameter
<pre> "{parameter?}" </pre>
"?" kennzeichnet einen optionalen Parameter. Das bedeutet, er passt sowohl auf einen Wert als auch auf einen leeren Wert.
Routen-Constraints
Routenparameter mit Constraint:
<pre> "{parameter:constraint}" </pre>
Ein Routenparameter, der eine Beschränkung (Constraint) hat, kann mit einem Wert übereinstimmen, der die angegebene Beschränkung erfüllt.
Mehrere Constraints
<pre> "{parameter:constraint1:constraint2}" </pre>
Ein Routenparameter kann mehr als eine Beschränkung haben, die durch einen Doppelpunkt ( : ) getrennt sind.
int Passt auf jede ganze Zahl. Bsp: {id:int} passt auf 123456789, -123456789
bool Passt auf true oder false. Groß- und Kleinschreibung wird nicht beachtet. Bsp: {active:bool} passt auf true, false, TRUE, FALSE
datetime Passt auf einen gültigen DateTime-Wert in den Formaten "yyyy-MM-dd hh:mm:ss tt" und "MM/dd/yyyy hh:mm:ss tt". Bsp: {id:datetime} passt auf 2030-01-01%2011:59%20pm Hinweis: '%20' entspricht einem Leerzeichen.
decimal Passt auf einen gültigen Dezimalwert. Bsp: {price:decimal} passt auf 49.99, -1, 0.01
long Passt auf einen gültigen Long-Wert. Bsp: {id:long} passt auf 123456789, -123456789
guid Passt auf einen gültigen Guid-Wert (Globally Unique Identifier - Eine hexadezimale Zahl, die universell eindeutig ist). Bsp: {id:guid} passt auf 123E4567-E89B-12D3-A456-426652340000
minlength(wert) Passt auf eine Zeichenkette, die mindestens die angegebene Anzahl von Zeichen hat. Bsp: {username:minlength(4)} passt auf John, Allen, William
maxlength(wert) Passt auf eine Zeichenkette, die höchstens die angegebene Anzahl von Zeichen hat. Bsp: {username:maxlength(7)} passt auf John, Allen, William
length(min,max) Passt auf eine Zeichenkette, deren Zeichenanzahl zwischen der angegebenen minimalen und maximalen Länge liegt (beide Zahlen einschließlich). Bsp: {username:length(4, 7)} passt auf John, Allen, William
length(wert) Passt auf eine Zeichenkette, die genau die angegebene Anzahl von Zeichen hat. Bsp: {tin:length(9)} passt auf 987654321
min(wert) Passt auf einen ganzzahligen Wert, der größer oder gleich dem angegebenen Wert ist. Bsp: {age:min(18)} passt auf 18, 19, 100
max(wert) Passt auf einen ganzzahligen Wert, der kleiner oder gleich dem angegebenen Wert ist. Bsp: {age:max(100)} passt auf -1, 1, 18, 100
range(min,max) Passt auf einen ganzzahligen Wert zwischen den angegebenen Minimal- und Maximalwerten (beide Zahlen einschließlich). Bsp: {age:range(18,100)} passt auf 18, 19, 99, 100
alpha Passt auf eine Zeichenkette, die nur Alphabete (A-Z) und (a-z) enthält. Bsp: {username:alpha} passt auf rick, william
regex(ausdruck) Passt auf eine Zeichenkette, die mit dem angegebenen regulären Ausdruck übereinstimmt. Bsp 1: {age:regex(^[0-9]{2}$)} passt auf jede zweistellige Zahl, wie 10, 11, 98, 99 Bsp 2: {age:regex(^\\d{3}-\\d{3}$)} passt auf jede dreistellige Zahl, gefolgt von einem Bindestrich und dann einer dreistelligen Zahl, wie 123-456
Benutzerdefinierte Routen-Constraint-Klassen
Benutzerdefinierte Routen-Constraint-Klasse
<pre> public class KlassenName : IRouteConstraint { public bool Match(HttpContext? HttpContext, IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) { //gibt true oder false zurück } } </pre>
<pre> builder.Services.AddRouting(options => { options.ConstraintMap.Add("name", typeof(KlassenName)); }); //Hinzufügen des benutzerdefinierten Constraints zum Routing </pre>
Reihenfolge der Endpunktauswahl
Oben hat die höchste Priorität (wird zuerst ausgewertet).
URL-Vorlage mit mehr Segmenten. Bsp: "a/b/c/d" hat eine höhere Priorität als "a/b/c".
URL-Vorlage mit literalen Text hat eine höhere Priorität als ein Parametersegment. Bsp: "a/b" hat eine höhere Priorität als "a/{parameter}".
URL-Vorlage, die ein Parametersegment mit Constraints hat, hat eine höhere Priorität als ein Parametersegment ohne Constraints. Bsp: "a/b:int" hat eine höhere Priorität als "a/b".
Catch-all-Parameter (**). Bsp: "a/{b}" hat eine höhere Priorität als "a/**".