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