Moduly, obslužné rutiny a middleware
Tip
Tento obsah je výňatek z eBooku pro Blazor vývojáře webových formulářů ASP NET pro Azure, který je k dispozici na webu .NET Docs nebo jako bezplatný soubor PDF ke stažení, který si můžete přečíst offline.
Aplikace ASP.NET Core je založená na řadě middlewaru. Middleware je obslužné rutiny uspořádané do kanálu pro zpracování požadavků a odpovědí. V aplikaci Webových formulářů řeší obslužné rutiny a moduly HTTP podobné problémy. V ASP.NET Core se moduly, obslužné rutiny, Global.asax.cs a životní cyklus aplikace nahradí middlewarem. V této kapitole se dozvíte o middlewaru v kontextu Blazor aplikace.
Přehled
Kanál požadavků ASP.NET Core se skládá z posloupnosti delegátů požadavků, kteří se volají jeden po druhém. Tento koncept demonstruje následující schéma. Vlákno spouštění postupuje podle černých šipek.
Předchozí diagram nemá koncept událostí životního cyklu. Tento koncept je základem toho, jak se zpracovávají požadavky webových formulářů ASP.NET. Tento systém usnadňuje odůvodnění toho, k jakému procesu dochází, a umožňuje vložení middlewaru v libovolném okamžiku. Middleware se spustí v pořadí, ve kterém se přidá do kanálu požadavku. Navíc se přidávají do kódu místo konfiguračních souborů, obvykle v Startup.cs.
Katana
Čtenáři, kteří jsou obeznámeni s Katana, se budou cítit pohodlně v ASP.NET Core. Katana je ve skutečnosti rámec, ze kterého ASP.NET Core pochází. Zavedl podobné vzory middlewaru a kanálu pro ASP.NET 4.x. Middleware navržený pro Katana je možné přizpůsobit tak, aby fungoval s kanálem ASP.NET Core.
Běžný middleware
ASP.NET 4.x obsahuje mnoho modulů. Podobně má ASP.NET Core k dispozici i mnoho komponent middlewaru. Moduly IIS se můžou v některých případech používat s ASP.NET Core. V jiných případech může být k dispozici nativní middleware ASP.NET Core.
Následující tabulka uvádí náhradní middleware a komponenty v ASP.NET Core.
Modul | modul ASP.NET 4.x | možnost ASP.NET Core |
---|---|---|
Chyby protokolu HTTP | CustomErrorModule |
Middleware stavových kódů |
Výchozí dokument | DefaultDocumentModule |
Výchozí middleware souborů |
Procházení adresářů | DirectoryListingModule |
Middleware pro procházení adresářů |
Dynamická komprese | DynamicCompressionModule |
Middleware pro kompresi odpovědí |
Trasování neúspěšných požadavků | FailedRequestsTracingModule |
Protokolování jádra ASP.NET |
Ukládání souborů do mezipaměti | FileCacheModule |
Middleware pro ukládání odpovědí do mezipaměti |
Ukládání do mezipaměti HTTP | HttpCacheModule |
Middleware pro ukládání odpovědí do mezipaměti |
Protokolování HTTP | HttpLoggingModule |
Protokolování jádra ASP.NET |
Přesměrování protokolu HTTP | HttpRedirectionModule |
Middleware pro přepis adres URL |
Filtry ISAPI | IsapiFilterModule |
Middleware |
ISAPI | IsapiModule |
Middleware |
Filtrování žádostí | RequestFilteringModule |
Přepis middlewaru IRule adresy URL |
Přepsání adresy URL† | RewriteModule |
Middleware pro přepis adres URL |
Statická komprese | StaticCompressionModule |
Middleware pro kompresi odpovědí |
Statický obsah | StaticFileModule |
Middleware statického souboru |
Autorizace URL | UrlAuthorizationModule |
základní identita ASP.NET |
Tento seznam není vyčerpávající, ale měl by poskytnout představu o tom, co mapování mezi těmito dvěma architekturami existuje. Podrobnější seznam najdete v modulu IIS s ASP.NET Core.
Vlastní middleware
Integrovaný middleware nemusí zpracovávat všechny scénáře potřebné pro aplikaci. V takových případech je vhodné vytvořit vlastní middleware. Existuje několik způsobů definování middlewaru, přičemž nejjednodušší je jednoduchý delegát. Vezměte v úvahu následující middleware, který přijímá požadavek jazykové verze z řetězce dotazu:
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 lze také definovat jako třídu, a to buď implementací IMiddleware
rozhraní, nebo podle konvence middlewaru. Další informace najdete v tématu Psaní vlastního middlewaru ASP.NET Core.