Middleware do ASP.NET CoreASP.NET Core Middleware

Por Rick Anderson e Steve SmithBy Rick Anderson and Steve Smith

O middleware é um software montado em um pipeline de aplicativo para manipular solicitações e respostas.Middleware is software that's assembled into an app pipeline to handle requests and responses. Cada componente:Each component:

  • Escolhe se deseja passar a solicitação para o próximo componente no pipeline.Chooses whether to pass the request to the next component in the pipeline.
  • Pode executar o trabalho antes e depois do próximo componente no pipeline.Can perform work before and after the next component in the pipeline.

Os delegados de solicitação são usados para criar o pipeline de solicitação.Request delegates are used to build the request pipeline. Os delegados de solicitação manipulam cada solicitação HTTP.The request delegates handle each HTTP request.

Os delegados de solicitação são configurados usando os métodos de extensão Run, Map e Use.Request delegates are configured using Run, Map, and Use extension methods. Um delegado de solicitação individual pode ser especificado em linha como um método anônimo (chamado do middleware em linha) ou pode ser definido em uma classe reutilizável.An individual request delegate can be specified in-line as an anonymous method (called in-line middleware), or it can be defined in a reusable class. Essas classes reutilizáveis e os métodos anônimos em linha são o middleware, também chamado de componentes do middleware.These reusable classes and in-line anonymous methods are middleware, also called middleware components. Cada componente de middleware no pipeline de solicitação é responsável por invocar o próximo componente no pipeline ou causar um curto-circuito do pipeline.Each middleware component in the request pipeline is responsible for invoking the next component in the pipeline or short-circuiting the pipeline. Quando um middleware causa um curto-circuito, ele é chamado de middleware terminal, porque impede que outros middlewares processem a solicitação.When a middleware short-circuits, it's called a terminal middleware because it prevents further middleware from processing the request.

Migrar módulos e manipuladores HTTP para ASP.NET Core middleware explica a diferença entre pipelines de solicitação no ASP.NET Core e no ASP.NET 4.x e fornece mais exemplos de middleware.Migrar módulos e manipuladores HTTP para ASP.NET Core middleware explains the difference between request pipelines in ASP.NET Core and ASP.NET 4.x and provides additional middleware samples.

Criar um pipeline do middleware com o IApplicationBuilderCreate a middleware pipeline with IApplicationBuilder

O pipeline de solicitação do ASP.NET Core consiste em uma sequência de delegados de solicitação, chamados um após o outro.The ASP.NET Core request pipeline consists of a sequence of request delegates, called one after the other. O diagrama a seguir demonstra o conceito.The following diagram demonstrates the concept. O thread de execução segue as setas pretas.The thread of execution follows the black arrows.

Padrão de processamento de solicitação mostrando a chegada de uma solicitação, processada por meio de três middlewares e a resposta que sai do aplicativo.

Cada delegado pode executar operações antes e depois do próximo delegado.Each delegate can perform operations before and after the next delegate. Os delegados de tratamento de exceção devem ser chamados no início do pipeline para que possam detectar exceções que ocorrem em etapas posteriores do pipeline.Exception-handling delegates should be called early in the pipeline, so they can catch exceptions that occur in later stages of the pipeline.

O aplicativo ASP.NET Core mais simples possível define um delegado de solicitação única que controla todas as solicitações.The simplest possible ASP.NET Core app sets up a single request delegate that handles all requests. Este caso não inclui um pipeline de solicitação real.This case doesn't include an actual request pipeline. Em vez disso, uma única função anônima é chamada em resposta a cada solicitação HTTP.Instead, a single anonymous function is called in response to every HTTP request.

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello, World!");
        });
    }
}

O primeiro delegado Run encerra o pipeline.The first Run delegate terminates the pipeline.

Encadeie vários delegados de solicitação junto com o Use.Chain multiple request delegates together with Use. O parâmetro next representa o próximo delegado no pipeline.The next parameter represents the next delegate in the pipeline. Lembre-se de que você pode causar um curto-circuito no pipeline ao não chamar o parâmetro next.You can short-circuit the pipeline by not calling the next parameter. Normalmente, você pode executar ações antes e depois do próximo delegado, conforme o exemplo a seguir demonstra:You can typically perform actions both before and after the next delegate, as the following example demonstrates:

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.Use(async (context, next) =>
        {
            // Do work that doesn't write to the Response.
            await next.Invoke();
            // Do logging or other work that doesn't write to the Response.
        });

        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello from 2nd delegate.");
        });
    }
}

Quando um delegado não transmite uma solicitação ao próximo delegado, considera-se que ele esteja causando um curto-circuito do pipeline de solicitação.When a delegate doesn't pass a request to the next delegate, it's called short-circuiting the request pipeline. O curto-circuito geralmente é desejável porque ele evita trabalho desnecessário.Short-circuiting is often desirable because it avoids unnecessary work. Por exemplo, o Middleware de Arquivo Estático pode agir com um middleware terminal, processando uma solicitação para um arquivo estático e causar curto-circuito no restante do pipeline.For example, Static File Middleware can act as a terminal middleware by processing a request for a static file and short-circuiting the rest of the pipeline. O middleware adicionado ao pipeline antes do middleware que finaliza o processamento adicional ainda processa o código após as instruções next.Invoke.Middleware added to the pipeline before the middleware that terminates further processing still processes code after their next.Invoke statements. No entanto, confira o seguinte aviso sobre a tentativa de gravar em uma resposta que já foi enviada.However, see the following warning about attempting to write to a response that has already been sent.

Aviso

Não chame next.Invoke depois que a resposta tiver sido enviada ao cliente.Don't call next.Invoke after the response has been sent to the client. Altera para HttpResponse depois de a resposta ser iniciada e lança uma exceção.Changes to HttpResponse after the response has started throw an exception. Por exemplo, mudanças como a configuração de cabeçalhos e o código de status lançam uma exceção.For example, changes such as setting headers and a status code throw an exception. Gravar no corpo da resposta após a chamada next:Writing to the response body after calling next:

  • Pode causar uma violação do protocolo.May cause a protocol violation. Por exemplo, gravar mais do que o Content-Length indicado.For example, writing more than the stated Content-Length.
  • Pode corromper o formato do corpo.May corrupt the body format. Por exemplo, gravar um rodapé HTML em um arquivo CSS.For example, writing an HTML footer to a CSS file.

HasStarted é uma dica útil para indicar se os cabeçalhos foram enviados ou o corpo foi gravado.HasStarted is a useful hint to indicate if headers have been sent or the body has been written to.

OrdemOrder

A ordem em que os componentes do middleware são adicionados ao método Startup.Configure define a ordem em que os componentes de middleware são invocados nas solicitações e a ordem inversa para a resposta.The order that middleware components are added in the Startup.Configure method defines the order in which the middleware components are invoked on requests and the reverse order for the response. A ordem é crítica para a segurança, o desempenho e a funcionalidade.The order is critical for security, performance, and functionality.

O método Startup.Configure a seguir adiciona componentes de middleware para cenários de aplicativo comuns:The following Startup.Configure method adds middleware components for common app scenarios:

  1. Exceção/tratamento de erroException/error handling
    • Quando o aplicativo é executado no ambiente de desenvolvimento:When the app runs in the Development environment:
      • O middleware da página de exceção do desenvolvedor (UseDeveloperExceptionPage) relata erros de tempo de execução do aplicativo.Developer Exception Page Middleware (UseDeveloperExceptionPage) reports app runtime errors.
      • Erro de banco de dados os relatórios de tempo de execução do banco de dados.Database Error Page Middleware reports database runtime errors.
    • Quando o aplicativo é executado no ambiente de produção:When the app runs in the Production environment:
      • O middleware do manipulador de exceção (UseExceptionHandler) captura exceções geradas nos middlewares a seguir.Exception Handler Middleware (UseExceptionHandler) catches exceptions thrown in the following middlewares.
      • O middleware do protocolo HTTP Strict Transport Security (HSTS) (UseHsts) adiciona o cabeçalho Strict-Transport-Security.HTTP Strict Transport Security Protocol (HSTS) Middleware (UseHsts) adds the Strict-Transport-Security header.
  2. O middleware de redirecionamento para HTTPS (UseHttpsRedirection) redireciona as solicitações HTTP para HTTPS.HTTPS Redirection Middleware (UseHttpsRedirection) redirects HTTP requests to HTTPS.
  3. O middleware de arquivo estático (UseStaticFiles) retorna arquivos estáticos e impede o processamento de novas solicitações.Static File Middleware (UseStaticFiles) returns static files and short-circuits further request processing.
  4. O middleware da política de cookies (UseCookiePolicy) adapta o aplicativo às normas do RGPD (Regulamento Geral sobre a Proteção de Dados).Cookie Policy Middleware (UseCookiePolicy) conforms the app to the EU General Data Protection Regulation (GDPR) regulations.
  5. Middleware de roteamento (UseRouting) para rotear solicitações.Routing Middleware (UseRouting) to route requests.
  6. O middleware de autenticação (UseAuthentication) tenta autenticar o usuário antes de ele ter acesso aos recursos seguros.Authentication Middleware (UseAuthentication) attempts to authenticate the user before they're allowed access to secure resources.
  7. O middleware de autorização (UseAuthorization) autoriza um usuário a acessar recursos seguros.Authorization Middleware (UseAuthorization) authorizes a user to access secure resources.
  8. O middleware de sessão (UseSession) estabelece e mantém o estado de sessão.Session Middleware (UseSession) establishes and maintains session state. Se o aplicativo usa o estado de sessão, chame o middleware de sessão após o middleware de política de cookies, e antes do middleware do MVC.If the app uses session state, call Session Middleware after Cookie Policy Middleware and before MVC Middleware.
  9. Middleware de roteamento de ponto de extremidade (UseEndpoints com MapRazorPages) para adicionar Razor Pages pontos de extremidade ao pipeline de solicitação.Endpoint Routing Middleware (UseEndpoints with MapRazorPages) to add Razor Pages endpoints to the request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();
    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();
    app.UseSession();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
    });
}

No código de exemplo anterior, cada método de extensão de middleware é exposto em IApplicationBuilder por meio do namespace Microsoft.AspNetCore.Builder.In the preceding example code, each middleware extension method is exposed on IApplicationBuilder through the Microsoft.AspNetCore.Builder namespace.

UseExceptionHandler é o primeiro componente de middleware adicionado ao pipeline.UseExceptionHandler is the first middleware component added to the pipeline. Portanto, o middleware de manipulador de exceção captura todas as exceções que ocorrem em chamadas posteriores.Therefore, the Exception Handler Middleware catches any exceptions that occur in later calls.

O Middleware de Arquivo Estático é chamado no início do pipeline para que possa controlar as solicitações e causar o curto-circuito sem passar pelos componentes restantes.Static File Middleware is called early in the pipeline so that it can handle requests and short-circuit without going through the remaining components. O Middleware de Arquivo Estático não fornece nenhuma verificação de autorização.The Static File Middleware provides no authorization checks. Todos os arquivos servidos pelo middleware de arquivo estático, incluindo aqueles em wwwroot, estão disponíveis publicamente.Any files served by Static File Middleware, including those under wwwroot, are publicly available. Para conhecer uma abordagem para proteger arquivos estáticos, veja Arquivos estáticos no ASP.NET Core.For an approach to secure static files, see Arquivos estáticos no ASP.NET Core.

Se a solicitação não for controlada pelo Middleware de Arquivo Estático, ela será transmitida para o Middleware de Autenticação (UseAuthentication), que executa a autenticação.If the request isn't handled by the Static File Middleware, it's passed on to the Authentication Middleware (UseAuthentication), which performs authentication. A autenticação causa curto-circuito em solicitações não autenticadas.Authentication doesn't short-circuit unauthenticated requests. Embora o middleware de autenticação autentique as solicitações, a autorização (e a rejeição) ocorre somente depois que o MVC seleciona uma Página Razor específica ou um controlador MVC e uma ação.Although Authentication Middleware authenticates requests, authorization (and rejection) occurs only after MVC selects a specific Razor Page or MVC controller and action.

O exemplo a seguir demonstra uma solicitação de middleware cujas solicitações de arquivos estáticos são manipuladas pelo Middleware de Arquivo Estático antes do Middleware de Compactação de Resposta.The following example demonstrates a middleware order where requests for static files are handled by Static File Middleware before Response Compression Middleware. Arquivos estáticos não são compactados com este pedido de middleware.Static files aren't compressed with this middleware order. As respostas Razor Pages podem ser compactadas.The Razor Pages responses can be compressed.

public void Configure(IApplicationBuilder app)
{
    // Static files aren't compressed by Static File Middleware.
    app.UseStaticFiles();

    app.UseResponseCompression();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
    });
}
  1. Exceção/tratamento de erroException/error handling
    • Quando o aplicativo é executado no ambiente de desenvolvimento:When the app runs in the Development environment:
      • O middleware da página de exceção do desenvolvedor (UseDeveloperExceptionPage) relata erros de tempo de execução do aplicativo.Developer Exception Page Middleware (UseDeveloperExceptionPage) reports app runtime errors.
      • O middleware da página de erro do banco de dados (Microsoft.AspNetCore.Builder.DatabaseErrorPageExtensions.UseDatabaseErrorPage) relata erros de tempo de execução do banco de dados.Database Error Page Middleware (Microsoft.AspNetCore.Builder.DatabaseErrorPageExtensions.UseDatabaseErrorPage) reports database runtime errors.
    • Quando o aplicativo é executado no ambiente de produção:When the app runs in the Production environment:
      • O middleware do manipulador de exceção (UseExceptionHandler) captura exceções geradas nos middlewares a seguir.Exception Handler Middleware (UseExceptionHandler) catches exceptions thrown in the following middlewares.
      • O middleware do protocolo HTTP Strict Transport Security (HSTS) (UseHsts) adiciona o cabeçalho Strict-Transport-Security.HTTP Strict Transport Security Protocol (HSTS) Middleware (UseHsts) adds the Strict-Transport-Security header.
  2. O middleware de redirecionamento para HTTPS (UseHttpsRedirection) redireciona as solicitações HTTP para HTTPS.HTTPS Redirection Middleware (UseHttpsRedirection) redirects HTTP requests to HTTPS.
  3. O middleware de arquivo estático (UseStaticFiles) retorna arquivos estáticos e impede o processamento de novas solicitações.Static File Middleware (UseStaticFiles) returns static files and short-circuits further request processing.
  4. O middleware da política de cookies (UseCookiePolicy) adapta o aplicativo às normas do RGPD (Regulamento Geral sobre a Proteção de Dados).Cookie Policy Middleware (UseCookiePolicy) conforms the app to the EU General Data Protection Regulation (GDPR) regulations.
  5. O middleware de autenticação (UseAuthentication) tenta autenticar o usuário antes de ele ter acesso aos recursos seguros.Authentication Middleware (UseAuthentication) attempts to authenticate the user before they're allowed access to secure resources.
  6. O middleware de sessão (UseSession) estabelece e mantém o estado de sessão.Session Middleware (UseSession) establishes and maintains session state. Se o aplicativo usa o estado de sessão, chame o middleware de sessão após o middleware de política de cookies, e antes do middleware do MVC.If the app uses session state, call Session Middleware after Cookie Policy Middleware and before MVC Middleware.
  7. MVC (UseMvc) para adicionar o MVC ao pipeline de solicitação.MVC (UseMvc) to add MVC to the request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();
    app.UseAuthentication();
    app.UseSession();
    app.UseMvc();
}

No código de exemplo anterior, cada método de extensão de middleware é exposto em IApplicationBuilder por meio do namespace Microsoft.AspNetCore.Builder.In the preceding example code, each middleware extension method is exposed on IApplicationBuilder through the Microsoft.AspNetCore.Builder namespace.

UseExceptionHandler é o primeiro componente de middleware adicionado ao pipeline.UseExceptionHandler is the first middleware component added to the pipeline. Portanto, o middleware de manipulador de exceção captura todas as exceções que ocorrem em chamadas posteriores.Therefore, the Exception Handler Middleware catches any exceptions that occur in later calls.

O Middleware de Arquivo Estático é chamado no início do pipeline para que possa controlar as solicitações e causar o curto-circuito sem passar pelos componentes restantes.Static File Middleware is called early in the pipeline so that it can handle requests and short-circuit without going through the remaining components. O Middleware de Arquivo Estático não fornece nenhuma verificação de autorização.The Static File Middleware provides no authorization checks. Todos os arquivos servidos pelo middleware de arquivo estático, incluindo aqueles em wwwroot, estão disponíveis publicamente.Any files served by Static File Middleware, including those under wwwroot, are publicly available. Para conhecer uma abordagem para proteger arquivos estáticos, veja Arquivos estáticos no ASP.NET Core.For an approach to secure static files, see Arquivos estáticos no ASP.NET Core.

Se a solicitação não for controlada pelo Middleware de Arquivo Estático, ela será transmitida para o Middleware de Autenticação (UseAuthentication), que executa a autenticação.If the request isn't handled by the Static File Middleware, it's passed on to the Authentication Middleware (UseAuthentication), which performs authentication. A autenticação causa curto-circuito em solicitações não autenticadas.Authentication doesn't short-circuit unauthenticated requests. Embora o middleware de autenticação autentique as solicitações, a autorização (e a rejeição) ocorre somente depois que o MVC seleciona uma Página Razor específica ou um controlador MVC e uma ação.Although Authentication Middleware authenticates requests, authorization (and rejection) occurs only after MVC selects a specific Razor Page or MVC controller and action.

O exemplo a seguir demonstra uma solicitação de middleware cujas solicitações de arquivos estáticos são manipuladas pelo Middleware de Arquivo Estático antes do Middleware de Compactação de Resposta.The following example demonstrates a middleware order where requests for static files are handled by Static File Middleware before Response Compression Middleware. Arquivos estáticos não são compactados com este pedido de middleware.Static files aren't compressed with this middleware order. As respostas do MVC de UseMvcWithDefaultRoute podem ser compactadas.The MVC responses from UseMvcWithDefaultRoute can be compressed.

public void Configure(IApplicationBuilder app)
{
    // Static files aren't compressed by Static File Middleware.
    app.UseStaticFiles();

    app.UseResponseCompression();

    app.UseMvcWithDefaultRoute();
}

Use, Run e MapUse, Run, and Map

Configure o pipeline de HTTP usando Use, Run e Map.Configure the HTTP pipeline using Use, Run, and Map. O método Use pode ligar o pipeline em curto-circuito (ou seja, se ele não chamar um delegado de solicitação next).The Use method can short-circuit the pipeline (that is, if it doesn't call a next request delegate). Run é uma convenção e alguns componentes de middleware podem expor os métodos Run[Middleware] que são executados no final do pipeline.Run is a convention, and some middleware components may expose Run[Middleware] methods that run at the end of the pipeline.

As extensões Map são usadas como uma convenção de ramificação do pipeline.Map extensions are used as a convention for branching the pipeline. Map ramifica o pipeline de solicitação com base na correspondência do caminho da solicitação em questão.Map branches the request pipeline based on matches of the given request path. Se o caminho da solicitação iniciar com o caminho especificado, o branch será executado.If the request path starts with the given path, the branch is executed.

public class Startup
{
    private static void HandleMapTest1(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Map Test 1");
        });
    }

    private static void HandleMapTest2(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Map Test 2");
        });
    }

    public void Configure(IApplicationBuilder app)
    {
        app.Map("/map1", HandleMapTest1);

        app.Map("/map2", HandleMapTest2);

        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello from non-Map delegate. <p>");
        });
    }
}

A tabela a seguir mostra as solicitações e as respostas de http://localhost:1234 usando o código anterior.The following table shows the requests and responses from http://localhost:1234 using the previous code.

SolicitaçãoRequest RespostaResponse
localhost:1234localhost:1234 Saudação do delegado diferente de Map.Hello from non-Map delegate.
localhost:1234/map1localhost:1234/map1 Teste de Map 1Map Test 1
localhost:1234/map2localhost:1234/map2 Teste de Map 2Map Test 2
localhost:1234/map3localhost:1234/map3 Saudação do delegado diferente de Map.Hello from non-Map delegate.

Ao usar Map, os segmentos de caminho correspondentes são removidos de HttpRequest.Path e anexados a HttpRequest.PathBase para cada solicitação.When Map is used, the matched path segments are removed from HttpRequest.Path and appended to HttpRequest.PathBase for each request.

MapWhen ramifica o pipeline de solicitação com base no resultado do predicado fornecido.MapWhen branches the request pipeline based on the result of the given predicate. Qualquer predicado do tipo Func<HttpContext, bool> pode ser usado para mapear as solicitações para um novo branch do pipeline.Any predicate of type Func<HttpContext, bool> can be used to map requests to a new branch of the pipeline. No exemplo a seguir, um predicado é usado para detectar a presença de uma variável de cadeia de caracteres de consulta branch:In the following example, a predicate is used to detect the presence of a query string variable branch:

public class Startup
{
    private static void HandleBranch(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            var branchVer = context.Request.Query["branch"];
            await context.Response.WriteAsync($"Branch used = {branchVer}");
        });
    }

    public void Configure(IApplicationBuilder app)
    {
        app.MapWhen(context => context.Request.Query.ContainsKey("branch"),
                               HandleBranch);

        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello from non-Map delegate. <p>");
        });
    }
}

A tabela a seguir mostra as solicitações e as respostas de http://localhost:1234 usando o código anterior.The following table shows the requests and responses from http://localhost:1234 using the previous code.

SolicitaçãoRequest RespostaResponse
localhost:1234localhost:1234 Saudação do delegado diferente de Map.Hello from non-Map delegate.
localhost:1234/?branch=masterlocalhost:1234/?branch=master Branch usado = mestreBranch used = master

Map é compatível com aninhamento, por exemplo:Map supports nesting, for example:

app.Map("/level1", level1App => {
    level1App.Map("/level2a", level2AApp => {
        // "/level1/level2a" processing
    });
    level1App.Map("/level2b", level2BApp => {
        // "/level1/level2b" processing
    });
});

Map também pode ser correspondido com vários segmentos de uma vez:Map can also match multiple segments at once:

public class Startup
{
    private static void HandleMultiSeg(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Map multiple segments.");
        });
    }

    public void Configure(IApplicationBuilder app)
    {
        app.Map("/map1/seg1", HandleMultiSeg);

        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello from non-Map delegate.");
        });
    }
}

Middleware internoBuilt-in middleware

O ASP.NET Core é fornecido com os seguintes componentes de middleware.ASP.NET Core ships with the following middleware components. A coluna Ordem fornece observações sobre o posicionamento do middleware no pipeline de processamento da solicitação e sob quais condições o middleware podem encerrar o processamento da solicitação.The Order column provides notes on middleware placement in the request processing pipeline and under what conditions the middleware may terminate request processing. Quando um middleware causa um curto-circuito na solicitação ao processar o pipeline e impede outros middleware downstream de processar uma solicitação, ele é chamado de middleware terminal.When a middleware short-circuits the request processing pipeline and prevents further downstream middleware from processing a request, it's called a terminal middleware. Para saber mais sobre curto-circuito, confira a seção Criar um pipeline de middleware com o IApplicationBuilder.For more information on short-circuiting, see the Create a middleware pipeline with IApplicationBuilder section.

MiddlewareMiddleware DescriçãoDescription OrdemOrder
AutenticaçãoAuthentication Fornece suporte à autenticação.Provides authentication support. Antes de HttpContext.User ser necessário.Before HttpContext.User is needed. Terminal para retornos de chamada OAuth.Terminal for OAuth callbacks.
Política de cookiesCookie Policy Acompanha o consentimento dos usuários para o armazenamento de informações pessoais e impõe padrões mínimos para campos de cookie, tais como secure e SameSite.Tracks consent from users for storing personal information and enforces minimum standards for cookie fields, such as secure and SameSite. Antes do middleware que emite cookies.Before middleware that issues cookies. Exemplos: autenticação, sessão e MVC (TempData).Examples: Authentication, Session, MVC (TempData).
CORSCORS Configura o Compartilhamento de Recursos entre Origens.Configures Cross-Origin Resource Sharing. Antes de componentes que usam o CORS.Before components that use CORS.
DiagnósticoDiagnostics Vários middleware separados que fornecem uma página de exceção do desenvolvedor, tratamento de exceção, páginas de código de status e a página da Web padrão para novos aplicativos.Several separate middlewares that provide a developer exception page, exception handling, status code pages, and the default web page for new apps. Antes dos componentes que geram erros.Before components that generate errors. Terminal para exceções ou para servir a página da Web padrão para novos aplicativos.Terminal for exceptions or serving the default web page for new apps.
Cabeçalhos encaminhadosForwarded Headers Encaminha cabeçalhos como proxy para a solicitação atual.Forwards proxied headers onto the current request. Antes dos componentes que consomem os campos atualizados.Before components that consume the updated fields. Exemplos: esquema, host, IP do cliente e método.Examples: scheme, host, client IP, method.
Verificações de integridadeHealth Check Verifica a integridade de um aplicativo ASP.NET Core e suas dependências, como a verificação da disponibilidade do banco de dados.Checks the health of an ASP.NET Core app and its dependencies, such as checking database availability. Terminal, se uma solicitação corresponde a um ponto de extremidade da verificação de integridade.Terminal if a request matches a health check endpoint.
Substituição do Método HTTPHTTP Method Override Permite que uma solicitação de entrada POST substitua o método.Allows an incoming POST request to override the method. Antes dos componentes que consomem o método atualizado.Before components that consume the updated method.
Redirecionamento de HTTPSHTTPS Redirection Redirecione todas as solicitações HTTP para HTTPS.Redirect all HTTP requests to HTTPS. Antes dos componentes que consomem a URL.Before components that consume the URL.
Segurança de Transporte Estrita de HTTP (HSTS)HTTP Strict Transport Security (HSTS) Middleware de aprimoramento de segurança que adiciona um cabeçalho de resposta especial.Security enhancement middleware that adds a special response header. Antes das respostas serem enviadas e depois dos componentes que modificam solicitações.Before responses are sent and after components that modify requests. Exemplos: cabeçalhos encaminhados, regravação de URL.Examples: Forwarded Headers, URL Rewriting.
MVCMVC Processa as solicitações com Razor Pages/MVC.Processes requests with MVC/Razor Pages. Terminal, se uma solicitação corresponder a uma rota.Terminal if a request matches a route.
OWINOWIN Interoperabilidade com aplicativos baseados em OWIN, em servidores e em middleware.Interop with OWIN-based apps, servers, and middleware. Terminal, se o middleware OWIN processa totalmente a solicitação.Terminal if the OWIN Middleware fully processes the request.
Cache de respostaResponse Caching Fornece suporte para as respostas em cache.Provides support for caching responses. Antes dos componentes que exigem armazenamento em cache.Before components that require caching.
Compactação de respostaResponse Compression Fornece suporte para a compactação de respostas.Provides support for compressing responses. Antes dos componentes que exigem compactação.Before components that require compression.
Localização de SolicitaçãoRequest Localization Fornece suporte à localização.Provides localization support. Antes dos componentes de localização importantes.Before localization sensitive components.
Roteamento de ponto de extremidadeEndpoint Routing Define e restringe as rotas de solicitação.Defines and constrains request routes. Terminal de rotas correspondentes.Terminal for matching routes.
SessãoSession Fornece suporte para gerenciar sessões de usuário.Provides support for managing user sessions. Antes de componentes que exigem a sessão.Before components that require Session.
Arquivos estáticosStatic Files Fornece suporte para servir arquivos estáticos e pesquisa no diretório.Provides support for serving static files and directory browsing. Terminal, se uma solicitação corresponde a um arquivo.Terminal if a request matches a file.
Regravação de URLURL Rewrite Fornece suporte para regravar URLs e redirecionar solicitações.Provides support for rewriting URLs and redirecting requests. Antes dos componentes que consomem a URL.Before components that consume the URL.
WebSocketsWebSockets Habilita o protocolo WebSockets.Enables the WebSockets protocol. Antes dos componentes que são necessários para aceitar solicitações de WebSocket.Before components that are required to accept WebSocket requests.

Recursos adicionaisAdditional resources