Freigeben über


Module, Handler und Middleware

Tipp

Diese Inhalte sind ein Auszug aus dem eBook „Blazor for ASP NET Web Forms Developers for Azure“, verfügbar unter .NET Docs oder als kostenlos herunterladbare PDF-Datei, die offline gelesen werden kann.

Miniaturansicht des Deckblatts des eBooks „Blazor for ASP NET Web Forms Developers for Azure“.

Eine ASP.NET Core-App basiert auf einer Reihe von Middleware. Middleware ist Handler, die in einer Pipeline angeordnet sind, um Anforderungen und Antworten zu verarbeiten. In einer Web Forms-App lösen HTTP-Handler und Module ähnliche Probleme. In ASP.NET Core werden Module, Handler, Global.asax.cs und der App-Lebenszyklus durch Middleware ersetzt. In diesem Kapitel erfahren Sie mehr über Middleware im Kontext einer Blazor App.

Überblick

Die ASP.NET Core-Anforderungspipeline besteht aus einer Sequenz von Anforderungsdelegaten, die nacheinander aufgerufen werden. Das Konzept wird im folgenden Diagramm veranschaulicht. Der Ausführungsthread folgt den schwarzen Pfeilen.

Rohrleitung

Im vorherigen Diagramm fehlt ein Konzept von Lebenszyklusereignissen. Dieses Konzept basiert darauf, wie ASP.NET Web forms-Anforderungen behandelt werden. Dieses System macht es einfacher, zu argumentieren, welcher Prozess auftritt, und ermöglicht es Middleware, an jedem Punkt einzufügen. Middleware wird in der Reihenfolge ausgeführt, in der sie der Anforderungspipeline hinzugefügt wird. Sie werden auch im Code anstelle von Konfigurationsdateien hinzugefügt, in der Regel in Startup.cs.

Katana

Leser, die mit Katana vertraut sind, fühlen sich in ASP.NET Core wohl. In der Tat ist Katana ein Framework, von dem ASP.NET Core abgeleitet wird. Es hat ähnliche Middleware- und Pipelinemuster für ASP.NET 4.x eingeführt. Middleware, die für Katana entwickelt wurde, kann an die Arbeit mit der ASP.NET Core-Pipeline angepasst werden.

Allgemeine Middleware

ASP.NET 4.x enthält viele Module. In ähnlicher Weise verfügt ASP.NET Core auch über viele Middleware-Komponenten. IIS-Module können in einigen Fällen mit ASP.NET Core verwendet werden. In anderen Fällen sind systemeigene ASP.NET Core-Middleware möglicherweise verfügbar.

In der folgenden Tabelle sind Ersatz-Middleware und -Komponenten in ASP.NET Core aufgeführt.

Modul ASP.NET 4.x-Modul ASP.NET Core-Option
HTTP-Fehler CustomErrorModule Middleware für Statuscodeseiten
Standarddokument DefaultDocumentModule Middleware für Standarddateien
Verzeichnissuche DirectoryListingModule Middleware für Verzeichnisbrowsen
Dynamische Komprimierung DynamicCompressionModule Middleware für Reaktionskomprimierung
Ablaufverfolgung für Anforderungsfehler FailedRequestsTracingModule ASP.NET Kernprotokollierung
Zwischenspeichern von Dateien FileCacheModule Antworten zwischenspeichernde Middleware
HTTP-Zwischenspeicherung HttpCacheModule Antworten zwischenspeichernde Middleware
HTTP-Protokollierung HttpLoggingModule ASP.NET Kernprotokollierung
HTTP-Umleitung HttpRedirectionModule URL Rewriting Middleware
ISAPI-Filter IsapiFilterModule Middleware
ISAPI IsapiModule Middleware
Anforderungsfilterung RequestFilteringModule Middleware-IRule zur URL-Umschreibung
URL-Umschreibung† RewriteModule URL Rewriting Middleware
Statische Komprimierung StaticCompressionModule Middleware für Reaktionskomprimierung
Statischer Inhalt StaticFileModule Middleware für statische Dateien
URL-Autorisierung UrlAuthorizationModule ASP.NET Core Identity

Diese Liste ist nicht erschöpfend, sollte aber eine Vorstellung davon geben, welche Zuordnung zwischen den beiden Frameworks besteht. Eine detailliertere Liste finden Sie in IIS-Modulen mit ASP.NET Core.

Benutzerdefinierte Middleware

Integrierte Middleware behandelt möglicherweise nicht alle Szenarien, die für eine App erforderlich sind. In solchen Fällen ist es sinnvoll, Eigene Middleware zu erstellen. Es gibt mehrere Methoden zum Definieren von Middleware, bei denen es sich beim einfachsten Vorkommen um einen einfachen Delegaten handelt. Beachten Sie die folgende Middleware, die eine Kulturanforderung aus einer Abfrage-Zeichenfolge akzeptiert:

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.Use(async (context, next) =>
        {
            var cultureQuery = context.Request.Query["culture"];

            if (!string.IsNullOrWhiteSpace(cultureQuery))
            {
                var culture = new CultureInfo(cultureQuery);

                CultureInfo.CurrentCulture = culture;
                CultureInfo.CurrentUICulture = culture;
            }

            // Call the next delegate/middleware in the pipeline
            await next();
        });

        app.Run(async (context) =>
            await context.Response.WriteAsync(
                $"Hello {CultureInfo.CurrentCulture.DisplayName}"));
    }
}

Middleware kann auch als Klasse definiert werden, entweder durch Implementieren der IMiddleware Schnittstelle oder durch folgende Middleware-Konvention. Weitere Informationen finden Sie unter Schreiben von benutzerdefinierter ASP.NET Core Middleware.