Kurse:Middleware: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „== Einführung in Middleware == Middleware ist eine Komponente, die in die Anwendungs-Pipeline eingebunden wird, um Anfragen (Requests) und Antworten (Responses) zu verarbeiten. Middlewares werden nacheinander verkettet und in der gleichen Reihenfolge ausgeführt, in der sie hinzugefügt werden. Middleware kann ein Request-Delegate (anonyme Methode oder Lambda-Ausdruck) oder eine Klasse sein. === Middleware - Run === Die Erweiterungsmethode namens '''Ru…“ |
(kein Unterschied)
|
Aktuelle Version vom 23. Juni 2025, 08:34 Uhr
Einführung in Middleware
Middleware ist eine Komponente, die in die Anwendungs-Pipeline eingebunden wird, um Anfragen (Requests) und Antworten (Responses) zu verarbeiten. Middlewares werden nacheinander verkettet und in der gleichen Reihenfolge ausgeführt, in der sie hinzugefügt werden.
Middleware kann ein Request-Delegate (anonyme Methode oder Lambda-Ausdruck) oder eine Klasse sein.
Middleware - Run
Die Erweiterungsmethode namens Run wird verwendet, um eine abschließende (terminating) / kurzschließende (short-circuiting) Middleware auszuführen, die die Anfrage nicht an die nächste Middleware weiterleitet.
<source lang="csharp"> app.Run( ); app.Run(async (HttpContext context) => { // Code }); </source>
Middleware-Kette
app.Use( )
Die Erweiterungsmethode namens Use wird verwendet, um eine nicht-abschließende Middleware auszuführen, die die Anfrage an die nächste Middleware weiterleiten kann oder auch nicht.
<source lang="csharp"> app.Use(async (HttpContext context, RequestDelegate next) => { // Logik davor await next(context); // Logik danach }); </source>
Middleware-Klasse
Eine Middleware-Klasse wird verwendet, um die Middleware-Logik von einem Lambda-Ausdruck in eine separate / wiederverwendbare Klasse auszulagern.
<source lang="csharp"> class MiddlewareClassName : IMiddleware { public async Task InvokeAsync(HttpContext context, RequestDelegate next) { // Logik davor await next(context); // Logik danach } }
// Registrierung in der Pipeline app.UseMiddleware<MiddlewareClassName>();
</source>
Middleware-Erweiterungen
Eine Middleware-Erweiterungsmethode wird verwendet, um die Middleware mit einem einzigen Methodenaufruf aufzurufen.
Middleware-Klasse:
<source lang="csharp"> class MiddlewareClassName : IMiddleware { public async Task InvokeAsync(HttpContext context, RequestDelegate next) { // Logik davor await next(context); // Logik danach } } </source>
Erweiterungsmethode:
<source lang="csharp"> static class ClassNameExtensions { public static IApplicationBuilder ExtensionMethodName(this IApplicationBuilder app) { return app.UseMiddleware<MiddlewareClassName>(); } }
// Aufruf in der Pipeline app.ExtensionMethodName();
</source>
Konventionelle Middleware
Eine konventionelle Middleware folgt einem Muster (Konstruktor mit einem RequestDelegate und eine InvokeAsync-Methode), anstatt die IMiddleware-Schnittstelle explizit zu implementieren.
<source lang="csharp"> class MiddlewareClassName { private readonly RequestDelegate _next;
public MiddlewareClassName(RequestDelegate next) { _next = next; }
public async Task InvokeAsync(HttpContext context) { // Logik davor await _next(context); // Logik danach } }
</source>
Erweiterungsmethode zur Registrierung:
<source lang="csharp"> static class ClassNameExtensions { public static IApplicationBuilder ExtensionMethodName(this IApplicationBuilder app) { return app.UseMiddleware<MiddlewareClassName>(); } }
// Aufruf in der Pipeline app.ExtensionMethodName();
</source>
Die richtige Reihenfolge der Middleware
Die Reihenfolge, in der Middleware-Komponenten zur Pipeline hinzugefügt werden, ist entscheidend, da sie die Verarbeitung von Anfragen und Antworten beeinflusst.
<source lang="csharp"> // Ausnahmebehandlung zuerst app.UseExceptionHandler("/Error");
// Erzwingt HTTPS app.UseHsts(); app.UseHttpsRedirection();
// Stellt statische Dateien bereit (z.B. HTML, CSS, Bilder) app.UseStaticFiles();
// Routing-Entscheidungen app.UseRouting();
// CORS-Richtlinien anwenden app.UseCors();
// Authentifizierung des Benutzers app.UseAuthentication();
// Autorisierung des Zugriffs auf Ressourcen app.UseAuthorization();
// Sitzungszustand verwalten app.UseSession();
// Endpunkte für Controller mappen app.MapControllers();
// Fügen Sie hier Ihre benutzerdefinierten Middlewares hinzu
// Eine abschließende Middleware am Ende app.Run();
</source>
Middleware - UseWhen
Die Erweiterungsmethode namens UseWhen wird verwendet, um einen Zweig der Middleware-Pipeline nur dann auszuführen, wenn die angegebene Bedingung wahr ist.
<source lang="csharp"> app.UseWhen( context => { return boolescher_Wert; }, // Bedingung appBuilder => { // Fügen Sie hier Ihre Middlewares für diesen Zweig hinzu appBuilder.Use(...); } ); </source>