Compartilhar via


Novidades no ASP.NET Core 10.0

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

Este artigo será atualizado à medida que novas versões prévias forem disponibilizadas. Consulte a página de comunicados do Asp.Net Core até que esta página seja atualizada.

Blazor

Esta seção descreve os novos recursos do Blazor.

parâmetro QuickGridRowClass

Aplique uma classe de estilo a uma linha da grade com base no item da linha usando o novo parâmetro RowClass. No exemplo a seguir, o método GetRowCssClass é chamado em cada linha para aplicar condicionalmente uma classe de folha de estilos com base no item de linha:

<QuickGrid ... RowClass="GetRowCssClass">
    ...
</QuickGrid>

@code {
    private string GetRowCssClass(MyGridItem item) =>
        item.IsArchived ? "row-archived" : null;
}

Para obter mais informações, consulte ASP.NET Core Blazor `QuickGrid` componente.

Blazor script como recurso web estático

Em versões anteriores do .NET, o script Blazor é fornecido de um recurso inserido na estrutura compartilhada do ASP.NET Core. No .NET 10 ou posterior, o script Blazor é servido como um ativo da Web estático com compactação automática e impressão digital.

Para obter mais informações, consulte os seguintes recursos:

Destaques do esquema de rota

O atributo [Route] agora dá suporte ao realce de sintaxe de rota para ajudar a visualizar a estrutura do modelo de rota:

O padrão de modelo de rota de um atributo de rota para o valor do contador mostra destaque de sintaxe

SignalR

Esta seção descreve os novos recursos do SignalR.

APIs mínimas

Esta seção descreve novos recursos para APIs mínimas.

OpenAPI

Esta seção descreve novos recursos para OpenAPI.

Suporte ao OpenAPI 3.1

ASP.NET Core adicionou suporte para gerar documentos OpenAPI versão 3.1 no .NET 10. Apesar do pequeno aumento na versão, o OpenAPI 3.1 é uma atualização significativa para a especificação OpenAPI, em particular com suporte total para Rascunho do esquema JSON 2020-12.

Algumas das alterações que você verá no documento OpenAPI gerado incluem:

  • Tipos anuláveis não têm mais a propriedade nullable: true no esquema.
  • Em vez de uma propriedade nullable: true, eles têm uma palavra-chave type cujo valor é uma matriz que inclui null como um dos tipos.

Com esse recurso, a versão padrão do OpenAPI para documentos gerados é3.1. A versão pode ser alterada ajustando explicitamente a propriedade OpenApiVersion do OpenApiOptions no parâmetro delegado configureOptions de AddOpenApi.

builder.Services.AddOpenApi(options =>
{
    // Specify the OpenAPI version to use.
    options.OpenApiVersion = Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_0;
});

Ao gerar o documento OpenAPI no momento do build, a versão do OpenAPI pode ser selecionada definindo o --openapi-version no item OpenApiGenerateDocumentsOptions MSBuild.

    <!-- Configure build-time OpenAPI generation to produce an OpenAPI 3.0 document. -->
    <OpenApiGenerateDocumentsOptions>--openapi-version OpenApi3_0</OpenApiGenerateDocumentsOptions>

O suporte ao OpenAPI 3.1 foi adicionado principalmente no PR a seguir.

Alterações significativas no OpenAPI 3.1

O suporte para OpenAPI 3.1 requer uma atualização para a biblioteca de OpenAPI.NET subjacente para uma nova versão principal, 2.0. Esta nova versão tem algumas alterações significativas da versão anterior. As alterações significativas podem afetar aplicativos se eles tiverem quaisquer transformadores de documento, operação ou esquema.

Uma das mudanças mais significativas é que a classe OpenApiAny foi descartada em favor do uso JsonNode diretamente. Os transformadores que usam OpenApiAny precisam ser atualizados para usar JsonNode. A seguinte diferença mostra as alterações no transformador de esquema do .NET 9 para o .NET 10:

options.AddSchemaTransformer((schema, context, cancellationToken) =>
{
    if (context.JsonTypeInfo.Type == typeof(WeatherForecast))
    {
-       schema.Example = new OpenApiObject
+       schema.Example = new JsonObject
        {
-           ["date"] = new OpenApiString(DateTime.Now.AddDays(1).ToString("yyyy-MM-dd")),
+           ["date"] = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"),
-           ["temperatureC"] = new OpenApiInteger(0),
+           ["temperatureC"] = 0,
-           ["temperatureF"] = new OpenApiInteger(32),
+           ["temperatureF"] = 32,
-           ["summary"] = new OpenApiString("Bracing"),
+           ["summary"] = "Bracing",
        };
    }
    return Task.CompletedTask;
});

Observe que essas alterações são necessárias mesmo ao congfigurar apenas a versão do OpenAPI para 3.0.

OpenAPI no Yaml

ASP.NET agora dá suporte ao serviço do documento OpenAPI gerado no formato YAML. YAML pode ser mais conciso do que JSON, eliminando chaves curvas e aspas quando essas podem ser inferidas. O YAML também dá suporte a cadeias de caracteres de várias linhas, que podem ser úteis para descrições longas.

Para configurar um aplicativo para atender ao documento OpenAPI gerado no formato YAML, especifique o ponto de extremidade na chamada MapOpenApi com um sufixo ".yaml" ou ".yml", conforme mostrado no exemplo a seguir:

app.MapOpenApi("/openapi/{documentName}.yaml");

Suporte para:

  • Atualmente, o YAML só está disponível para o OpenAPI servido no Ponto de Extremidade de API.
  • A geração de documentos OpenAPI no formato YAML no momento da compilação é adicionada em uma versão prévia futura.

Consulte este PR, o qual adicionou suporte para exibir o documento OpenAPI gerado em formato YAML.

Descrição da resposta em ProducesResponseType

Os atributos ProducesAttribute, ProducesResponseTypeAttributee ProducesDefaultResponseType agora aceitam um parâmetro de cadeia de caracteres opcional, Description, que definirá a descrição da resposta. Veja um exemplo:

[HttpGet(Name = "GetWeatherForecast")]
[ProducesResponseType<IEnumerable<WeatherForecast>>(StatusCodes.Status200OK, Description = "The weather forecast for the next 5 days.")]
public IEnumerable<WeatherForecast> Get()
{

E o OpenAPI gerado:

        "responses": {
          "200": {
            "description": "The weather forecast for the next 5 days.",
            "content": {

Contribuição da Comunidade por Sander ten Brinke

Autenticação e autorização

Esta seção descreve novos recursos para autenticação e autorização.

Variado

Esta seção descreve novos recursos diversos no ASP.NET Core 10.0.

Melhor suporte para testar aplicativos com instruções de nível superior

O .NET 10 agora tem melhor suporte para testar aplicativos que usam instruções de nível superior. Anteriormente, os desenvolvedores tinham que adicionar manualmente public partial class Program ao arquivo de Program.cs para que o projeto de teste pudesse referenciar o Program class. public partial class Program foi necessário porque o recurso de instrução de nível superior no C# 9 gerou um Program class que foi declarado como interno.

No .NET 10, utiliza-se um gerador de origem para gerar a declaração de public partial class Program caso o programador não a tenha declarado explicitamente. Além disso, um analisador foi adicionado para detectar quando public partial class Program é declarado explicitamente e aconselha o desenvolvedor a removê-lo.

Imagem

Os seguintes PRs contribuíram para esta funcionalidade:

Detectar se a URL é local usando RedirectHttpResult.IsLocalUrl

Use o novo método auxiliar RedirectHttpResult.IsLocalUrl(url) para detectar se uma URL é local. Uma URL será considerada local se o seguinte for verdadeiro:

URLs que utilizam caminhos virtuais"~/" são considerados locais também.

IsLocalUrl é útil para validar URLs antes de redirecionar para elas para evitar ataques de redirecionamento aberto.

if (RedirectHttpResult.IsLocalUrl(url))
{
    return Results.LocalRedirect(url);
}

Obrigado @martincostello por esta contribuição!