
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.
Related articles

Jan 28, 2020 · 8 min read
Warum IP-Adressen kein eindeutiges Merkmal sind
Immer wieder sieht man in Code, der für den Login eines Benutzers verwendet wird, dass mit Hilfe der IP-Adresse oder zum Beispiel auch dem …

Oct 04, 2019 · 2 min read
Using ASP.NET Core 3 in .NET libraries
With the release of ASP.NET Core 3, Microsoft has also changed the way how to use and reference ASP.NET Core dependencies. In the past you …

Mar 26, 2017 · 1 min read
Better exception details with ASP.NET Core
By default, ASP.NET Core suppresses Exceptions on Startup on external environments. So you only get Exceptions in Startup on localhost.
Let's Work Together
Looking for an experienced Platform Architect or Engineer for your next project? Whether it's cloud migration, platform modernization or building new solutions from scratch - I'm here to help you succeed.

Comments