Novidades do ASP.NET Core 2.2

Este artigo destaca as alterações mais significativas no ASP.NET Core 2.2, com links para a documentação relevante.

analisadores e convenções do OpenAPI

O OpenAPI (anteriormente conhecido como Swagger) é uma especificação independente de linguagem para descrever APIs REST. O ecossistema do Open API tem ferramentas que permitem descobrir, testar e produzir o código do cliente usando a especificação. O suporte para gerar e visualizar documentos do OpenAPI no ASP.NET Core MVC é fornecido por meio de projetos controlados pela comunidade, como NSwag e Swashbuckle.AspNetCore. O ASP.NET Core 2.2 fornece ferramentas e experiências de runtime aprimoradas para a criação de documentos do OpenAPI.

Para saber mais, consulte os recursos a seguir:

Suporte de detalhes do problema

O ASP.NET Core 2.1 introduziu o ProblemDetails, com base na especificação RFC 7807 para transmitir os detalhes de um erro com uma Resposta HTTP. No 2.2, ProblemDetails é a resposta padrão para códigos de erro do cliente em controladores atribuídos com ApiControllerAttribute. Um IActionResult que retorna um código de status de erro do cliente (4xx) retorna um corpo ProblemDetails. O resultado também inclui uma ID de correlação que pode ser usada para correlacionar o erro usando logs de solicitação. Para erros do cliente, ProducesResponseType usa como padrão ProblemDetails como o tipo de resposta. Isso é documentado na saída do OpenAPI/Swagger gerada com o NSwag ou o Swashbuckle.AspNetCore.

Roteamento de ponto de extremidade

O ASP.NET Core 2.2 usa um novo sistema de roteamento de ponto de extremidade para expedição aprimorada de solicitações. As alterações incluem novos membros da API de geração de link e transformadores de parâmetro de rota.

Para saber mais, consulte os recursos a seguir:

Verificações de integridade

Um novo serviço de verificações de integridade facilita o uso do ASP.NET Core em ambientes que exigem verificações de integridade, como o Kubernetes. As verificações de integridade incluem middleware e um conjunto de bibliotecas que definem um serviço e uma abstração IHealthCheck.

As verificações de integridade são usadas por um orquestrador de contêineres ou um balanceador de carga para determinar rapidamente se um sistema está respondendo às solicitações normalmente. Um orquestrador de contêineres pode responder a uma verificação de integridade com falha interrompendo uma implantação sem interrupção ou reiniciando um contêiner. Um balanceador de carga pode responder a uma verificação de integridade encaminhando o tráfego para fora da instância com falha do serviço.

As verificações de integridade são expostas por um aplicativo como um ponto de extremidade HTTP usado por sistemas de monitoramento. As verificações de integridade podem ser configuradas para uma variedade de cenários de monitoramento em tempo real e sistemas de monitoramento. O serviço de verificações de integridade é integrado ao projeto BeatPulse. que facilita a adição de verificações para dezenas de sistemas e dependências populares.

Para obter mais informações, confira Verificações de integridade no ASP.NET Core.

HTTP/2 em Kestrel

O ASP.NET Core 2.2 adiciona suporte ao HTTP/2.

O HTTP/2 é uma revisão principal do protocolo HTTP. Os recursos notáveis de HTTP/2 incluem:

  • Suporte para compactação de cabeçalho.
  • Fluxos totalmente multiplexados em uma única conexão.

Embora HTTP/2 preserve a semântica do HTTP (por exemplo, cabeçalhos HTTP e métodos), é uma alteração interruptiva de enquadramento e envio de dados entre o cliente e o servidor com relação ao HTTP/1.x.

Como consequência dessa alteração no enquadramento, os servidores e os clientes precisam negociar a versão de protocolo usada. O recurso ALPN (Negociação de Protocolo da Camada de Aplicativo) é uma extensão TLS com a qual o servidor e o cliente podem negociar a versão de protocolo usada como parte do handshake TLS. Embora seja possível ter um conhecimento prévio entre o servidor e o cliente sobre o protocolo, todos os principais navegadores dão suporte ALPN como a única maneira de estabelecer uma conexão HTTP/2.

Para obter mais informações, confira Suporte ao HTTP/2.

Configuração de Kestrel

Em versões anteriores do ASP.NET Core, as opções do Kestrel são configuradas por meio da chamada a UseKestrel. No 2.2, as opções do Kestrel são configuradas por meio da chamada a ConfigureKestrel no construtor do host. Essa alteração resolve um problema com a ordem dos registros IServer para a hospedagem em processo. Para saber mais, consulte os recursos a seguir:

Hospedagem em processo do IIS

Em versões anteriores do ASP.NET Core, o IIS funciona como um proxy reverso. No 2.2, o Módulo do ASP.NET Core pode inicializar o CoreCLR e hospedar um aplicativo dentro do processo de trabalho do IIS (w3wp.exe). A hospedagem em processo fornece ganhos de desempenho e diagnóstico durante a execução com o IIS.

Para obter mais informações, confira Hospedagem em processo para IIS.

SignalR Cliente Java

O ASP.NET Core 2.2 introduz um Cliente Java para o SignalR. Esse cliente dá suporte à conexão a um Servidor SignalR do ASP.NET Core por meio do código Java, incluindo aplicativos Android.

Para saber mais, confira Cliente Java SignalR do ASP.NET Core.

Melhorias do CORS

Em versões anteriores do ASP.NET Core, o Middleware do CORS permite o envio dos cabeçalhos Accept, Accept-Language, Content-Language e Origin, independentemente dos valores configurados em CorsPolicy.Headers. No 2.2, uma correspondência de política do Middleware do CORS só é possível quando os cabeçalhos enviados em Access-Control-Request-Headers corresponder exatamente aos cabeçalhos indicados em WithHeaders.

Para obter mais informações, confira Middleware do CORS.

Compactação de resposta

O ASP.NET Core 2.2 pode compactar respostas com o formato de compactação Brotli.

Para obter mais informações, confira O middleware de compactação de resposta dá suporte à compactação Brotli.

Modelos de projeto

Os modelos de projeto Web ASP.NET Core foram atualizados para o Bootstrap 4 e o Angular 6. A nova aparência é visualmente mais simples e facilita a visualização das estruturas importantes do aplicativo.

Home or Index page

Desempenho de validação

O sistema de validação do MVC foi projetado para ser extensível e flexível, permitindo que você determine a cada solicitação quais validadores se aplicam a determinado modelo. Isso é ótimo para a criação de provedores de validação complexa. No entanto, na maioria dos casos, um aplicativo usa apenas os validadores internos e não exige essa flexibilidade extra. Validadores internos incluem DataAnnotations como [Required] e [StringLength], e IValidatableObject.

No ASP.NET Core 2.2, o MVC poderá causar um curto-circuito na validação se ele determinar que um grafo de modelo fornecido não exige validação. Ignorar a validação resulta em melhorias significativas ao validar modelos que não podem ou não têm nenhum validador. Isso inclui objetos, como coleções de primitivos (como byte[], string[], Dictionary<string, string>), ou grafos de objeto complexo sem muitos validadores.

Desempenho do Cliente HTTP

No ASP.NET Core 2.2, o desempenho do SocketsHttpHandler foi aprimorado, reduzindo a contenção de bloqueio do pool de conexão. Para aplicativos que fazem muitas solicitações HTTP de saída, como algumas arquiteturas de microsserviços, a taxa de transferência foi aprimorada. Sob carga, a taxa de transferência do HttpClient pode ser melhorada em até 60% no Linux e 20% no Windows.

Para obter mais informações, confira a solicitação de pull que fez essa melhoria.

Informações adicionais

Para obter a lista completa de alterações, confira as Notas sobre a versão do ASP.NET Core 2.2.