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