Novidades do ASP.NET Core 2.1

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

SignalR

SignalR foi reescrito para ASP.NET Core 2.1.

O ASP.NET Core SignalR inclui uma série de melhorias:

  • Um modelo de expansão simplificado.
  • Um novo cliente JavaScript sem dependência jQuery.
  • Um novo protocolo binário compacto com base em MessagePack.
  • Suporte para protocolos personalizados.
  • Um novo modelo de resposta de transmissão.
  • Suporte para clientes com base em WebSockets básicos.

Para obter mais informações, confira ASP.NET CoreSignalR.

Bibliotecas de classes Razor

O ASP.NET Core 2.1 torna mais fácil criar e incluir uma interface do usuário baseada em Razor em uma biblioteca e compartilhá-la em vários projetos. O novo SDK do Razor habilita o build de arquivos do Razor em um projeto de biblioteca de classes que podem ser empacotados em um pacote do NuGet. Exibições e páginas em bibliotecas são descobertas automaticamente e podem ser substituídas pelo aplicativo. Ao integrar a compilação do Razor ao build:

  • O tempo de inicialização do aplicativo é significativamente mais rápido.
  • Atualizações rápidas a modos de exibição e páginas Razor em runtime ainda estão disponíveis como parte de um fluxo de trabalho de desenvolvimento iterativo.

Para obter mais informações, veja Criar interface do usuário reutilizável usando o projeto de Biblioteca de Classes Razor.

Scaffolding e biblioteca de interfaces do usuário Identity

O ASP.NET Core 2.1 fornece o ASP.NET Core Identity como uma RazorBiblioteca de Classes. Aplicativos que incluem Identity podem aplicar o novo scaffolder do Identity para adicionar seletivamente o código-fonte contido na RCL (Biblioteca de Classes do IdentityRazor). Talvez você queira gerar o código-fonte para que você possa modificar o código e alterar o comportamento. Por exemplo, você pode instruir o scaffolder a gerar o código usado no registro. O código gerado tem precedência sobre o mesmo código na RCL Identity.

Aplicativos que não incluem autenticação podem aplicar o scaffolder do Identity para adicionar o pacote do RCL do Identity. Você tem a opção de selecionar o código Identity a ser gerado.

Para obter mais informações, veja Scaffold Identity em projetos ASP.NET Core.

HTTPS

Com o foco cada vez maior em segurança e privacidade, é importante habilitar HTTPS para aplicativos Web. A imposição de HTTPS está se tornando cada vez mais rígida na Web. Sites que não usam HTTPS são considerados inseguros. Navegadores (Chrome, Mozilla) estão começando a impor o uso de recursos Web em um contexto de seguro. O RGPD requer o uso de HTTPS para proteger a privacidade do usuário. Quando usar HTTPS em produção for fundamental, usar HTTPS no desenvolvimento pode ajudar a evitar problemas de implantação (por exemplo, links inseguros). O ASP.NET Core 2.1 inclui uma série de melhorias que tornam mais fácil usar HTTPS em desenvolvimento e configurar HTTPS em produção. Para mais informações, consulte Impor o HTTPS.

Ativado por padrão

Para facilitar o desenvolvimento de sites seguros, o HTTPS é agora habilitado por padrão. Da versão 2.1 em diante, o Kestrel escuta em https://localhost:5001 quando um certificado de desenvolvimento local está presente. Um certificado de desenvolvimento é criado:

  • Como parte da experiência de primeira execução do SDK do .NET Core, quando você usa o SDK pela primeira vez.
  • Manualmente usando a nova ferramenta dev-certs.

Execute dotnet dev-certs https --trust para confiar no certificado.

Redirecionamento e imposição de HTTPS

Aplicativos Web geralmente precisam escutar em HTTP e HTTPS, mas, então redirecionam todo o tráfego HTTP para HTTPS. Na versão 2.1, foi introduzido o middleware de redirecionamento de HTTPS especializado que redireciona de modo inteligente com base na presença de portas do servidor associado ou de configuração.

O uso de HTTPS pode ser imposto ainda mais empregando HSTS (Protocolo de Segurança do Transporte Estrita HTTP). HSTS instrui navegadores a sempre acessarem o site por meio de HTTPS. O ASP.NET Core 2.1 adiciona middleware HSTS compatível com opções para idade máxima, subdomínios e a lista de pré-carregamento de HSTS.

Configuração para produção

Em produção, HTTPS precisa ser configurado explicitamente. Na versão 2.1, foi adicionado o esquema de configuração padrão para configurar o HTTPS do Kestrel. Os aplicativos podem ser configurados para usar:

GDPR

O ASP.NET Core fornece APIs e modelos para ajudar a atender alguns dos requisitos do RGPD (Regulamento de Proteção de Dados Geral) da UE. Para obter mais informações, veja Suporte RGPD no ASP.NET Core. Um aplicativo de exemplo mostra como usar e permite que você teste a maioria dos pontos de extensão RGPD e APIs adicionados aos modelos do ASP.NET Core 2.1.

Testes de integração

É introduzido um novo pacote que simplifica a criação e a execução do teste. O pacote Microsoft.AspNetCore.Mvc.Testing lida com as seguintes tarefas:

  • Copia o arquivo de dependência (.deps) do aplicativo testado para a pasta bin do projeto de teste.
  • Define a raiz de conteúdo para a raiz do projeto do aplicativo testado para que arquivos estáticos e páginas/exibições sejam encontrados quando os testes forem executados.
  • Fornece a classe WebApplicationFactory<TEntryPoint> para simplificar a inicialização do aplicativo testado com TestServer.

O teste a seguir usa xUnit para verificar se a página de índice é carregada com um código de status de êxito e o cabeçalho Content-Type correto:

public class BasicTests
    : IClassFixture<WebApplicationFactory<RazorPagesProject.Startup>>
{
    private readonly HttpClient _client;

    public BasicTests(WebApplicationFactory<RazorPagesProject.Startup> factory)
    {
        _client = factory.CreateClient();
    }

    [Fact]
    public async Task GetHomePage()
    {
        // Act
        var response = await _client.GetAsync("/");

        // Assert
        response.EnsureSuccessStatusCode(); // Status Code 200-299
        Assert.Equal("text/html; charset=utf-8",
            response.Content.Headers.ContentType.ToString());
    }
}

Para obter mais informações, veja o tópico Testes de integração.

[ApiController], ActionResult<T>

O ASP.NET Core 2.1 adiciona novas convenções de programação que facilitam o build de APIs Web limpas e descritivas. ActionResult<T> é um novo tipo adicionado para permitir que um aplicativo retorne um tipo de resposta ou qualquer outro resultado da ação (semelhante a IActionResult), enquanto ainda indica o tipo de resposta. O atributo [ApiController] também foi adicionado como a maneira de aceitar convenções e comportamentos específicos da API Web.

Para obter mais informações, veja Criar APIs Web com ASP.NET Core.

IHttpClientFactory

O ASP.NET Core 2.1 inclui um novo serviço IHttpClientFactory que torna mais fácil configurar e consumir instâncias de HttpClient em aplicativos. O HttpClient já tem o conceito de delegar manipuladores que podem ser vinculados uns aos outros para solicitações HTTP de saída. O alocador:

  • Torna o registro de instâncias de HttpClient por cliente nomeado mais intuitivo.
  • Implementa um manipulador Polly que permite que políticas Polly sejam usadas para Retry, CircuitBreakers etc.

Para obter mais informações, veja Iniciar solicitações de HTTP.

Configuração de transporte libuv Kestrel

Com a liberação do ASP.NET Core 2.1, o transporte padrão de Kestrel deixa de ser baseado no Libuv, baseando-se agora em soquetes gerenciados. Para obter mais informações, veja KestrelImplementação do servidor web: configuração de transporte do Libuv.

Construtor de host genérico

O Construtor de Host Genérico (HostBuilder) foi introduzido. Este construtor pode ser usado para aplicativos que não processam solicitações HTTP (mensagens, tarefas em segundo plano etc.).

Para saber mais, confira Host Genérico do .NET.

Modelos do SPA atualizados

Os modelos de Aplicativo de Página Única para Angular e React são atualizados para usar estruturas de projeto padrão e criar sistemas para cada estrutura.

O modelo Angular se baseia na Angular CLI e os modelos React baseiam-se em create-react-app.

Para obter mais informações, consulte:

Busca do Razor Pages por ativos Razor

Na versão 2.1, o Razor Pages faz a busca de ativos do Razor (como layouts e parciais) nos seguintes diretórios na ordem listada:

  1. Pasta de Páginas atual.
  2. /Pages/Shared/
  3. /Views/Shared/

Razor Pages em uma área

O Razor Pages agora é compatível com áreas. Para ver um exemplo de área, crie um novo aplicativo web do Razor Pages com contas de usuário individuais. O aplicativo web do Razor Pages com contas de usuário individuais inclui /Areas/Identity/Pages.

Versão de compatibilidade do MVC

O método SetCompatibilityVersion permite que um aplicativo aceite ou recuse as possíveis alterações da falha de comportamento introduzidas no ASP.NET Core MVC 2.1 ou posteriores.

Para obter mais informações, consulte Versão de compatibilidade para ASP.NET Core MVC.

Migrar de 2.0 para 2.1

Veja Migrar do ASP.NET Core 2.0 para 2.1.

Informações adicionais

Para obter uma lista de alterações, vejas as Notas de versão do ASP.NET Core 2.1.