Moduler, hanterare och mellanprogram

Tips/Råd

Det här innehållet är ett utdrag ur e-boken, Blazor för ASP NET Web Forms Developers for Azure, tillgängligt på .NET Docs eller som en kostnadsfri nedladdningsbar PDF som kan läsas offline.

Blazor-for-ASP-NET-Web-Forms-Developers eBook-omslagsminiatyr.

En ASP.NET Core-app bygger på en serie mellanprogram. Mellanprogram är hanterare som är ordnade i en pipeline för att hantera begäranden och svar. I en Web Forms-app löser HTTP-hanterare och moduler liknande problem. I ASP.NET Core ersätts moduler, hanterare, Global.asax.cs och appens livscykel med mellanprogram. I det här kapitlet får du lära dig mer om mellanprogram i kontexten för en Blazor app.

Översikt

Pipelinen för ASP.NET Core-begäran består av en sekvens med förfrågedelegater som anropas efter varandra. Följande diagram visar konceptet. Exekveringstråden följer de svarta pilarna.

rörledning

Föregående diagram saknar begreppet livscykelhändelser. Det här konceptet är grundläggande för hur ASP.NET Web Forms-begäranden hanteras. Det här systemet gör det enklare att resonera om vilken process som förekommer och gör att mellanprogram kan infogas när som helst. Mellanprogram körs i den ordning det läggs till i begärandepipelinen. De läggs också till i kod i stället för konfigurationsfiler, vanligtvis i Startup.cs.

Katana

Läsare som är bekanta med Katana kommer att känna sig bekväma i ASP.NET Core. Faktum är att Katana är ett ramverk från vilket ASP.NET Core härleds. Den introducerade liknande mellanprogram och pipelinemönster för ASP.NET 4.x. Mellanprogram som är utformade för Katana kan anpassas för att fungera med ASP.NET Core-pipelinen.

Vanliga mellanprogram

ASP.NET 4.x innehåller många moduler. På liknande sätt har ASP.NET Core även många mellanprogramskomponenter. IIS-moduler kan i vissa fall användas med ASP.NET Core. I andra fall kan inbyggda ASP.NET Core-mellanprogram vara tillgängliga.

I följande tabell visas ersättningsmellanprogram och komponenter i ASP.NET Core.

Modul ASP.NET 4.x-modul ASP.NET Core-alternativ
HTTP-fel CustomErrorModule Mellanprogram för statuskodsidor
Standarddokument DefaultDocumentModule Mellanprogram för standardfiler
Katalogbläddring DirectoryListingModule Katalogbläddring mellanprogram
Dynamisk komprimering DynamicCompressionModule Mellanprogram för svarskomprimering
Spårning av misslyckade begäranden FailedRequestsTracingModule ASP.NET Core-loggning
Filcache FileCacheModule Cachelagring av svar mellanprogram
HTTP-cache HttpCacheModule Cachelagring av svar mellanprogram
HTTP-loggning HttpLoggingModule ASP.NET Core-loggning
HTTP-omdirigering HttpRedirectionModule Mellanprogramvara för URL-omskrivning
ISAPI-filter IsapiFilterModule Mellanprogramvara
ISAPI IsapiModule Mellanprogramvara
Filtrering av begäran RequestFilteringModule URL-omskrivning Middleware IRule
URL-omskrivning† RewriteModule Mellanprogramvara för URL-omskrivning
Statisk komprimering StaticCompressionModule Mellanprogram för svarskomprimering
Statiskt innehåll StaticFileModule Mellanprogram för statisk fil
URL-auktorisering UrlAuthorizationModule ASP.NET Kärnidentitet

Den här listan är inte fullständig, men bör ge en uppfattning om vilken mappning som finns mellan de två ramverken. En mer detaljerad lista finns i IIS-moduler med ASP.NET Core.

Anpassat mellanprogram

Inbyggda mellanprogram kanske inte hanterar alla scenarier som behövs för en app. I sådana fall är det klokt att skapa egna mellanprogram. Det finns flera sätt att definiera mellanvara, där det enklaste är en enkel delegat. Överväg följande mellanprogram, som accepterar en kulturbegäran från en frågesträng:

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}"));
    }
}

Mellanprogram kan också definieras som klass, antingen genom att implementera IMiddleware gränssnittet eller genom att följa mellanprogramkonventionen. Mer information finns i Skriv anpassad ASP.NET Core-mellanvara.