Partilhar via


O que há de novo 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 de visualização forem disponibilizadas. Consulte a página de anúncio do Asp.Net Core até que esta página seja atualizada.

Blazor

Esta seção descreve as novas funcionalidades para Blazor.

QuickGrid RowClass parâmetro

Aplique uma classe de folha de estilo a uma linha da grade com base no item de 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 estilo 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 componente Core Blazor 'QuickGrid'.

Blazor script como ativo web estático

Em versões anteriores do .NET, o script Blazor é servido a partir de um recurso incorporado 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 modelo de rota

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

Padrão de modelo de rota para um atributo de rota relativo ao valor do contador mostra realce de sintaxe

SignalR

Esta seção descreve as novas funcionalidades para SignalR.

APIs mínimas

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

OpenAPI

Esta seção descreve os novos recursos para OpenAPI.

Suporte a OpenAPI 3.1

ASP.NET Core adicionou suporte para gerar OpenAPI versão 3.1 documentos no .NET 10. Apesar do aumento da versão menor, OpenAPI 3.1 é uma atualização significativa da especificação OpenAPI, em particular com suporte total para JSON Schema draft 2020-12.

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

  • Os 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 definindo 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 em tempo de compilação, a versão 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 através do seguinte PR.

Alterações significativas na 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 de quebra em relação à versão anterior. As alterações significativas podem ter impacto nas aplicações se estas tiverem documentos, operações ou transformadores de esquema.

Uma das mudanças mais significativas é que a classe OpenApiAny foi abandonada em favor do uso JsonNode diretamente. Os transformadores que usam OpenApiAny precisam ser atualizados para usar JsonNode. A diferenciação abaixo 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 quando apenas congfigurando a versão OpenAPI para 3.0.

OpenAPI em Yaml

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

Para configurar um aplicativo para servir o 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:

  • YAML está atualmente disponível apenas para a OpenAPI servida a partir do endpoint OpenAPI.
  • A geração de documentos OpenAPI no formato YAML durante a compilação será adicionada numa pré-visualização futura.

Veja este PR, que adicionou suporte para disponibilizar 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. Aqui está um exemplo:

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

E a OpenAPI gerada:

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

Contribuição comunitária pelo Sander ten Brinke🙏

Autenticação e autorização

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

Diversos

Esta seção descreve vários novos recursos 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 fazer referência ao Program class. public partial class Program foi necessário porque a funcionalidade de declaração de nível superior no C# 9 gerou um Program class que foi declarado como interno .

No .NET 10, um gerador de código-fonte é usado para gerar a declaração public partial class Program se o programador não a declarou explicitamente. Além disso, um analisador foi adicionado para detetar quando public partial class Program é declarado explicitamente e aconselhar o desenvolvedor a removê-lo.

Imagem

Os seguintes PRs contribuíram para esta funcionalidade:

Detetar se o URL é local usando RedirectHttpResult.IsLocalUrl

Use o novo método auxiliar de RedirectHttpResult.IsLocalUrl(url) para detetar se uma URL é local. Um URL é considerado local se as seguintes condições forem verdadeiras:

  • Ele não tem a seção de host ou a seção de autoridade .
  • Tem um caminho absoluto .

As URLs que usam caminhos virtuais"~/" também são locais.

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

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

Obrigado @martincostello por esta contribuição!