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.

Blazor-for-ASP-NET-Web-Forms-Developers eBook cover thumbnail.

Eine ASP.NET Core-App basiert auf einer Reihe von Middleware. Middleware sind 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 aus. In ASP.NET Core werden Module, Handler, Global. asax. csund der Lebenszyklus der App durch Middleware ersetzt. In diesem Kapitel erfahren Sie mehr über Middleware im Kontext einer Blazor-App.

Übersicht

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.

pipeline

Im vorangehenden Diagramm fehlt ein Konzept von Lebenszyklus-Ereignissen. Dieses Konzept ist grundlegend für die Behandlung von ASP.NET Web Forms-Anforderungen. Dieses System macht es einfacher, Rückschlüsse auf den ablaufenden Prozess zu ziehen, und ermöglicht das Einfügen von Middleware an jedem beliebigen Zeitpunkt. Die Middleware wird in der Reihenfolge ausgeführt, in der sie der Anforderungspipeline hinzugefügt wird. Sie wird auch im Code anstelle von Konfigurationsdateien hinzugefügt, normalerweise in Startup. cs.

Katana

Leser, die mit Katana vertraut sind, kommen auch mit ASP.NET Core zurecht. Tatsächlich ist Katana ein Framework, von dem ASP.NET Core abgeleitet ist. Es wurden eine ähnliche Middleware und Pipeline-Muster für ASP.NET 4.x eingeführt. Die für Katana entworfene Middleware kann an die ASP.NET Core Pipeline angepasst werden.

Allgemeine Middleware

ASP.NET 4.x umfasst viele Module. In ähnlicher Weise verfügt ASP.NET Core auch über zahlreiche Middleware-Komponenten. IIS-Module können in einigen Fällen mit ASP.NET Core verwendet werden. In anderen Fällen ist möglicherweise die native ASP.NET Core Middleware verfügbar.

In der folgenden Tabelle werden die Ersatz-Middleware und -Komponenten in ASP.NET Core aufgelistet.

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 Verzeichnissuche
Dynamische Komprimierung DynamicCompressionModule Antworten komprimierende Middleware
Ablaufverfolgung für Anforderungsfehler FailedRequestsTracingModule ASP.NET Core-Protokollierung
Dateizwischenspeicherung FileCacheModule Antworten zwischenspeichernde Middleware
HTTP-Zwischenspeicherung HttpCacheModule Antworten zwischenspeichernde Middleware
HTTP-Protokollierung HttpLoggingModule ASP.NET Core-Protokollierung
HTTP-Umleitung HttpRedirectionModule URL-umschreibende Middleware
ISAPI-Filter IsapiFilterModule Middleware
ISAPI IsapiModule Middleware
Anforderungsfilterung RequestFilteringModule Middleware-IRule zur URL-Umschreibung
URL-Umschreibung† RewriteModule URL-umschreibende Middleware
Statische Komprimierung StaticCompressionModule Antworten komprimierende Middleware
Statischer Inhalt StaticFileModule Middleware für statische Dateien
URL-Autorisierung UrlAuthorizationModule ASP.NET Core-Identität

Diese Liste ist nicht vollständig, sollte jedoch eine Vorstellung davon vermitteln, welche Zuordnung zwischen den beiden Frameworks vorhanden ist. Eine ausführlichere Liste finden Sie unter IIS-Module mit ASP.NET Core.

Benutzerdefinierte Middleware

Integrierte Middleware verarbeitet möglicherweise nicht alle Szenarien, die für eine App erforderlich sind. In solchen Fällen ist es sinnvoll, Ihre 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, indem entweder die IMiddleware-Schnittstelle oder die folgende Middleware-Konvention implementiert wird. Weitere Informationen finden Sie unter Schreiben von benutzerdefinierter ASP.NET Core Middleware.