Dela via


Moduler, hanterare och mellanprogram

Dricks

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

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 ASP.NET Core-begäran består av en sekvens med begärandedelegater som anropas en efter en. Följande diagram visar konceptet. Körningstråden följer de svarta pilarna.

pipeline

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
Cachelagring av filer FileCacheModule Svar Cachelagring Mellanprogram
HTTP-cachelagring HttpCacheModule Svar Cachelagring Mellanprogram
HTTP-loggning HttpLoggingModule ASP.NET Core-loggning
Omdirigering för HTTP HttpRedirectionModule URL-omskrivning av mellanprogram
ISAPI-filter IsapiFilterModule Middleware
ISAPI IsapiModule Middleware
Filtrering av begäran RequestFilteringModule URL:en skriver om Middleware IRule
URL-omskrivning† RewriteModule URL-omskrivning av mellanprogram
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 mellanprogram, där det enklaste är ett enkelt ombud. Ö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 Skriva anpassade ASP.NET Core-mellanprogram.