Partilhar via


Módulos, manipuladores e middleware

Gorjeta

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.

Blazor-for-ASP-NET-Web-Forms-Developers eBook cover thumbnail.

Um aplicativo ASP.NET Core é criado com base em uma série de middleware. Middleware são manipuladores organizados em um pipeline para lidar com solicitações 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.

Descriçã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.

pipeline

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 ASP.NET opção Core
Erros de HTTP CustomErrorModule Middleware de páginas de código de status
Documento predefinido DefaultDocumentModule Middleware de arquivos padrão
Navegação nos diretórios DirectoryListingModule Middleware de navegação no diretório
Compressão dinâmica DynamicCompressionModule Middleware de compressão de resposta
Rastreamento de solicitações com falha FailedRequestsTracingModule ASP.NET Core Logging
Cache de arquivos FileCacheModule Middleware de cache de resposta
Cache HTTP HttpCacheModule Middleware de cache de resposta
Registo de HTTP HttpLoggingModule ASP.NET Core Logging
Redirecionamento de HTTP HttpRedirectionModule Middleware de reconfiguração de URL
Filtros ISAPI IsapiFilterModule Middleware
ISAPI IsapiModule Middleware
Filtragem de pedidos RequestFilteringModule URL Reescrevendo Middleware IRule
Reescrita de URL† RewriteModule Middleware de reconfiguração de URL
Compressão estática StaticCompressionModule Middleware de compressão de resposta
Conteúdo estático StaticFileModule Middleware de arquivo estático
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 várias maneiras de definir middleware, sendo a mais simples um simples delegado. Considere o seguinte middleware, que aceita uma solicitação de cultura de uma cadeia de caracteres de consulta:

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 interface ou seguindo a IMiddleware convenção de middleware. Para obter mais informações, consulte Escrever middleware ASP.NET Core personalizado.