Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Dica
Esse conteúdo é um trecho do livro eletrônico, Blazor para Desenvolvedores do ASP NET Web Forms para o Azure, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.
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.
Visão geral
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. O diagrama a seguir demonstra o conceito. O thread de execução segue as setas pretas.
O diagrama anterior não tem um conceito de eventos de ciclo de vida. Esse conceito é fundamental para a maneira como as solicitações do Web Forms ASP.NET 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 no código em vez de arquivos de configuração, geralmente em Startup.cs.
Katana
Os leitores familiarizados com Katana se sentirão confortáveis no ASP.NET Core. Na verdade, Katana é uma estrutura da qual o ASP.NET Core deriva. Ele introduziu padrões de middleware e pipeline semelhantes para ASP.NET 4.x. O middleware projetado para Katana pode ser adaptado para funcionar com o pipeline do ASP.NET Core.
Middleware comum
ASP.NET 4.x inclui muitos módulos. De maneira semelhante, 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, o middleware nativo do ASP.NET Core pode estar disponível.
A tabela a seguir lista os componentes e middleware de substituição no ASP.NET Core.
| Módulo | módulo ASP.NET 4.x | Opção ASP.NET Core |
|---|---|---|
| Erros HTTP | CustomErrorModule |
Middleware de páginas de código de status |
| Documento padrão | DefaultDocumentModule |
Middleware de arquivos padrão |
| Pesquisa no diretório | DirectoryListingModule |
Middleware de navegação no diretório |
| Compactação dinâmica | DynamicCompressionModule |
Middleware de compactação de resposta |
| Rastreamento de solicitação com falha | FailedRequestsTracingModule |
Log de Eventos do ASP.NET Core |
| Cache de arquivos | FileCacheModule |
Middleware de Cache de Resposta |
| Cache HTTP | HttpCacheModule |
Middleware de Cache de Resposta |
| Registro de HTTP | HttpLoggingModule |
Log de Eventos do ASP.NET Core |
| Redirecionamento HTTP | HttpRedirectionModule |
Middleware de regravação de URL |
| Filtros ISAPI | IsapiFilterModule |
Middleware |
| ISAPI | IsapiModule |
Middleware |
| Filtragem de solicitações | RequestFilteringModule |
IRule de middleware de reescrita de URL |
| Reescrita de URL | RewriteModule |
Middleware de regravação de URL |
| Compactação estática | StaticCompressionModule |
Middleware de compactação de resposta |
| Conteúdo estático | StaticFileModule |
Middleware de arquivos estáticos |
| Autorização de URL | UrlAuthorizationModule |
identidade principal do ASP.NET |
Essa lista não é exaustiva, mas deve dar uma ideia de qual mapeamento existe entre as duas estruturas. 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. Há várias maneiras de definir o middleware, sendo o mais simples um delegado simples. 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 IMiddleware interface ou seguindo a convenção de middleware. Para obter mais informações, confira Escrever middleware do ASP.NET Core personalizado.