Sdílet prostřednictvím


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.

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

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.

pipeline

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.