O que é Middleware?
Middleware é um software montado em pipelines de aplicações para lidar com requisições e respostas. Cada componente:
- Escolha se deseja passar a solicitação para o próximo componente do pipeline.
- O trabalho pode ser realizado antes e depois que o próximo componente do pipeline é invocado.
Os delegatos de requisição são usados para construir um pipeline de requisições que lida com cada requisição HTTP.
Os delegados de requisição são configurados usando os métodos de extensão Run, Map e Use. Um delegado de requisição separado pode ser especificado em um método anônimo inline (chamado middleware inline), ou pode ser definido em uma classe reutilizável. Essas classes reutilizáveis e métodos de anonimização inline são middleware ou componentes de middleware. Cada componente middleware no fluxo de requisições é responsável por chamar o próximo componente no pipeline e, se apropriado, por curto-circuito pelo link.
Migrar módulos HTTP para middleware explica a diferença entre ASP.NET Core e pipelines de requisições em versões anteriores (ASP.NET) e fornece mais exemplos de middleware.
Use o IApplicationBuilder para criar um pipeline de middleware
O processo de requisição ASP.NET Core consiste em uma série de delegados de requisição, como mostrado na figura a seguir (o processo de execução segue a seta preta):
Cada delegado pode realizar ações antes e depois do próximo delegado. O delegado também pode decidir não passar a solicitação para o próximo delegado, o que é chamado de curto-circuito no pipeline de requisição. Um curto-circuito geralmente é desejável porque evita trabalhos desnecessários. Por exemplo, middleware de arquivo estático pode retornar uma solicitação para um arquivo estático e curto-circuitar o restante do pipeline. Delegados de tratamento de exceções precisam ser invocados cedo no pipeline, para que possam capturar exceções em pipelines posteriores.
A coisa mais simples provavelmente é configurar um delegado ASP.NET aplicação Core para lidar com todas as solicitações. Esse cenário não inclui o pipeline real de requisições. Em vez disso, um método anônimo é chamado para cada requisição HTTP.
O primeiro app. Run delegate encerra o pipeline.
Existe um código assim:
Acessado pelo navegador, descobre-se que está realmente no primeiro app. Run termina o pipeline.
Você pode delegar múltiplos pedidos pelo app. O uso está conectado. O próximo parâmetro representa o próximo delegado no pipeline. (Lembre-se de que você pode encerrar o pipeline não chamando o próximo parâmetro.) Você geralmente pode realizar ações antes e depois da próxima delegação, como mostrado no exemplo a seguir:
Usar um navegador para acessar resultados como:
Pode-se ver que a ordem de execução do delegado da solicitação segue o fluxograma acima.
Nota:
Depois que a resposta for enviada ao cliente, não ligue em seguida. Invoke。 Após o início da resposta, alterações no HttpResponse lançam uma exceção. Por exemplo, definir cabeçalhos de resposta, códigos de status, etc., gera uma exceção. Escreva o corpo da resposta após ligar em seguida.
pode resultar em violação do acordo. Por exemplo, escrever mais do que o comprimento do conteúdo descrito em comprimento de conteúdo.
A formatação de conteúdo responsivo pode estar com problemas. Por exemplo, escreva um rodapé HTML em um arquivo CSS.
HttpResponse.HasStarted é uma dica útil para indicar se um cabeçalho de resposta foi enviado e/ou se o corpo foi escrito.
Middleware embutido
ASP.NET Core vem com os seguintes componentes de middleware:
| Middleware | descrição | | Autenticação | O suporte à autenticação está disponível | | CORS | Configurar compartilhamento de recursos entre domínios | | Cache de resposta | Suporte a resposta em cache está disponível | | Compressão de resposta | Fornecer suporte para compressão de resposta | | Roteamento | Definir e restringir o roteamento de requisições | | Sessão | Fornece gerenciamento de sessões de usuário | | Arquivos Estáticos | Oferece suporte para navegação estática de arquivos e diretórios | | Middleware de Reescrita de URL | Usado para reescrever URLs e solicitar suporte para redirecionamentos |
|