Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Sugestão
Este conteúdo é um excerto do eBook, Blazor para ASP NET Web Forms Developers for Azure, disponível no .NET Docs ou como um PDF transferível gratuito que pode ser lido offline.
Um aplicativo ASP.NET Core é criado com base em uma série de middleware. Middleware é um conjunto de manipuladores organizados num fluxo para lidar com pedidos e respostas. Em um aplicativo Web Forms, manipuladores HTTP e módulos resolvem problemas semelhantes. No ASP.NET Core, módulos, manipuladores, Global.asax.cs e o ciclo de vida do aplicativo são substituídos por middleware. Neste capítulo, você aprenderá sobre middleware no contexto de um Blazor aplicativo.
Visão geral
O pipeline de solicitação ASP.NET Core consiste em uma sequência de delegados de solicitação, chamados um após o outro. O diagrama a seguir demonstra o conceito. O fio da execução segue as setas pretas.
O diagrama anterior carece de um conceito de eventos do ciclo de vida. Esse conceito é fundamental para como ASP.NET solicitações de Web Forms são tratadas. Esse sistema facilita o raciocínio sobre qual processo está ocorrendo e permite que o middleware seja inserido a qualquer momento. O middleware é executado na ordem em que é adicionado ao pipeline de solicitação. Eles também são adicionados em código em vez de arquivos de configuração, geralmente em Startup.cs.
Katana
Os leitores familiarizados com Katana se sentirão confortáveis em ASP.NET Core. Na verdade, Katana é uma estrutura da qual ASP.NET Core deriva. Ele introduziu padrões semelhantes de middleware e pipeline para ASP.NET 4.x. O middleware projetado para Katana pode ser adaptado para trabalhar com o pipeline ASP.NET Core.
Middleware comum
ASP.NET 4.x inclui muitos módulos. Da mesma forma, o ASP.NET Core também tem muitos componentes de middleware disponíveis. Os módulos do IIS podem ser usados em alguns casos com o ASP.NET Core. Em outros casos, middleware nativo do ASP.NET Core pode estar disponível.
A tabela a seguir lista middleware e componentes de substituição no ASP.NET Core.
| Módulo | ASP.NET módulo 4.x | Opção do ASP.NET Core |
|---|---|---|
| Erros HTTP | CustomErrorModule |
Middleware de páginas de códigos de estado |
| Documento padrão | DefaultDocumentModule |
Middleware de arquivos padrão |
| Navegação no diretório | DirectoryListingModule |
Middleware de navegação no diretório |
| Compressão dinâmica | DynamicCompressionModule |
Middleware de compressão de resposta |
| Rastreamento de solicitações falhadas | FailedRequestsTracingModule |
ASP.NET Core Logging |
| Cache de arquivos | FileCacheModule |
Middleware de cache de resposta |
| Cache de HTTP | HttpCacheModule |
Middleware de cache de resposta |
| Registo HTTP | HttpLoggingModule |
ASP.NET Core Logging |
| Redirecionamento HTTP | HttpRedirectionModule |
Middleware de reescrita de URL |
| Filtros ISAPI | IsapiFilterModule |
Middleware |
| ISAPI | IsapiModule |
Middleware |
| Filtragem de pedidos | RequestFilteringModule |
Reescrita de URL Middleware IRule |
| Reescrita de URL† | RewriteModule |
Middleware de reescrita de URL |
| Compressão estática | StaticCompressionModule |
Middleware de compressão de resposta |
| Conteúdo estático | StaticFileModule |
Middleware de ficheiros estáticos |
| Autorização de URL | UrlAuthorizationModule |
ASP.NET Identidade Principal |
Esta lista não é exaustiva, mas deve dar uma ideia do mapeamento que existe entre os dois frameworks. Para obter uma lista mais detalhada, consulte Módulos do IIS com ASP.NET Core.
Middleware personalizado
O middleware interno pode não lidar com todos os cenários necessários para um aplicativo. Nesses casos, faz sentido criar seu próprio middleware. Existem muitas formas de definir middleware, sendo a mais simples a de um delegado simples. Considere o seguinte middleware, que aceita um pedido de configuração cultural a partir de um query string.
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}"));
}
}
O middleware também pode ser definido como classe, implementando a IMiddleware interface ou seguindo a convenção de middleware. Para obter mais informações, consulte Write custom ASP.NET Core middleware.