© Caliope Dake/Shutterstock.com
Gemeinsamkeiten, Unterschiede und Best Practices

ASP.NET Core: Middleware vs. Filter


In ASP.NET Core besteht die Anfragepipeline aus so genannter Middleware. Neben bereits mitgelieferter Middleware wie Routing, Authentication oder MVC Middleware, lässt sich durch selbstimplementierte Middleware Einfluss auf die Anfragepipeline nehmen. ASP. NET MVS hatte zu diesem Zweck u. a. Filter zur Verfügung gestellt, die in ASP.NET Core weiterhin existieren. Im Folgenden werden wir die Unterschiede von Middleware und Filtern betrachten und klären, welche der beiden Methoden für welche Szenarien geeignet ist.

„Hiermit lässt sich die Anfragepipeline manipulieren und ermöglicht die auf eigene Ansprüche zugeschnittene Reaktion der Anwendung auf bestimmte Anfragen“. Diese Aussage trifft erstmal sowohl auf Filter als auch Middleware zu. Durch beide Methoden lassen sich die gleichen Ziele erreichen: Man kann mit ihnen einen Eingriff in die Standardpipeline von ASP.NET Core vornehmen. Zunächst betrachten wir jeweils Middleware und Filter separat, um im Anschluss die Differenzen besser erkennen zu können.

Middleware

Middleware stellt eine einzelne, in sich abgeschlossene Komponente der HTTP-Request-Pipelines dar. Damit ist der Lebenszyklus einer Anfrage an unsere Anwendung gemeint, die schlussendlich mit einem HTTP Re­sponse endet. Auch das MVC-Template ist in ASP.NET Core eine Middleware, die beim Anlegen eines neuen ASP. NET-Core-Projekts automatisch generiert wird (Abb. 1).

acikgoez_1.tif_fmt1.jpgAbb. 1: Neues ASP.NET-Projekt

Listing 1

public void Configure(IApplicationBuilder app, IHostingEnvironment env,ILoggerFactory loggerFactory) { app.UseStaticFiles(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }

Die Middleware wird der definierten Reihenfolge entsprechend ausgeführt. Im obigen Beispiel wird zuerst die Static-Files-Middleware und anschließend die MVC-Middleware definiert und in dieser Reihenfolge beim Start ausgeführt. Dieser Pipeline kann ohne großen Aufwand eigene Middleware hinzugefügt werden. Um einen direkten Vergleich zum Filter zu haben, erstellen wir eine banale Logging-Middleware, die zu Beginn jeder Anfrage einen Log-in der Konsole ausgibt. Dazu erstellen wir eine Klasse namens LoggingMiddleware – vorzugsweise in einem neuen Ordner, den wir Middleware nennen – und fügen den in Listing 2 angegebenen Code ein.

Listing 2

public class LoggingMiddleware { private readonly RequestDelegate next; private readonly ILogger logger; public LoggingMiddleware(RequestDelegate next, ILoggerFactory loggerFac...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang