ASP.NET Core - Teil 2: die Middleware

ASP.NET Core - Teil 2: die Middleware

Bereit bei ASP.NET 4 konnte man mit Hilfe von OWIN - Open Web Interface for .NET - Middleware-Implementierungen sehr einfach und robust umsetzen. Middlewares bieten hier eine Pipeline, sodass verschiedene Middleware nichts voneinander wissen müssen; Requests und Responses aber mit einem Pipeline-Prinzip abgearbeitet werden können.

ASP.NET Core hat dieses Pipeline-System sehr ähnlich übernommen; jedoch vereinfacht und weiter verbessert.

Beispiel Middleware: Logging jedes Requests

Dank dem Pipeline-Machanismus in ASP.NET Core ist es sehr einfach eine eigene Middleware zu schreiben. Folgendes Snippet macht nichts anderes, als jeden Requests zu loggen:

 1public class LogMiddleware
 2{
 3   private readonly RequestDelegate _next;
 4   private readonly ILogger _logger;
 5
 6   public LogMiddleware( RequestDelegate next, ILoggerFactory lf )
 7   {
 8      _next = next;
 9      _logger = lf.CreateLogger< LogMiddleware >( );
10   }
11
12   public async Task Invoke(HttpContext context)
13   {
14      _logger.Log($"Request: {context.Request.Path}");
15
16       await _next.Invoke(context);
17
18      _logger.Log("Done.");
19   }
20}

Registriert wird die Middleware in der Startup-Klasse:

 1class Startup
 2{
 3  public void Configure( IApplicationBuilder app )
 4  {
 5      app.UseMiddleware< LogMiddleware >( );
 6
 7      app.Run(async (context) =>
 8      {
 9          await context.Response.WriteAsync("Hello World!");
10      });
11   }
12}

Die Reigenfolge der Middleware bei der Registrierung bestimmt auch die Reihenfolge der Abarbeitung. In diesem Fall wird die Logging Middleware vor dem Hello-World Output registriert; die Logging Middleware damit auch vorher ausgeführt.

Jede Middleware erhält als Parameter die Middleware, die im Anschluss erfolgt: public LogMiddleware( RequestDelegate next, ILoggerFactory lf ) Daher muss die eigene Middleware die nächste Middleware aktiv mit await _next.Invoke(context); antriggern.


Comments

Twitter Facebook LinkedIn WhatsApp