Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Návod
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 jsou obslužné rutiny uspořádané do potrubí 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ů v ASP.NET Core se skládá z posloupnosti delegátů požadavků, kteří se volají postupně. 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 pipeline 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 HTTP | CustomErrorModule |
Middleware stavových kódů |
| Výchozí dokument | DefaultDocumentModule |
Middleware pro výchozí soubory |
| Procházení adresářů | DirectoryListingModule |
Middleware pro procházení adresářů |
| Dynamická komprese | DynamicCompressionModule |
Middleware pro kompresi odpovědí |
| Sledování nezdařených požadavků | FailedRequestsTracingModule |
Protokolování v ASP.NET Core |
| 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 |
| HTTP logování | HttpLoggingModule |
Protokolování v ASP.NET Core |
| Přesměrování HTTP | HttpRedirectionModule |
Middleware pro přepis adres URL |
| Filtry ISAPI | IsapiFilterModule |
Middleware |
| ISAPI | IsapiModule |
Middleware |
| Filtrování žádostí | RequestFilteringModule |
URL přepisovací middleware IRule |
| 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 adresy URL | UrlAuthorizationModule |
základní identita ASP.NET |
Tento seznam není vyčerpávající, ale měl by poskytnout představu o tom, jaké mapování existuje mezi těmito dvěma rámci. Podrobnější seznam viz IIS moduly 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. Zvažte následující middleware, který přijímá požadavek na jazykovou verzi 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. Pro více informací viz Write custom ASP.NET Core middleware.