Kurse:Routing

Aus ahrensburg.city
Zur Navigation springen Zur Suche springen

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/**".

WebRoot