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:
- Estrutura de projeto Blazor do ASP.NET Core
- Arquivos estáticos do ASP.NET Core Blazor
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:
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-chavetype
cujo valor é uma matriz que incluinull
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.
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:
- Ele não tem a seção host ou autoridade.
- Ele tem um caminho absoluto.
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!