Novedades de ASP.NET Core 10.0
En este artículo se resaltan los cambios más significativos de ASP.NET Core 10.0 con vínculos a la documentación pertinente.
Este artículo se actualizará a medida que se publiquen nuevas versiones preliminares. Consulte la página de anuncio de Asp.Net Core hasta que se actualice esta página.
Blazor
En esta sección se describen las nuevas características de Blazor.
parámetro QuickGridRowClass
Aplique una clase de hoja de estilos a una fila de la cuadrícula basada en el elemento de fila mediante el nuevo parámetro RowClass
. En el ejemplo siguiente, se llama al método GetRowCssClass
en cada fila para aplicar condicionalmente una clase de hoja de estilos basada en el elemento de fila:
<QuickGrid ... RowClass="GetRowCssClass">
...
</QuickGrid>
@code {
private string GetRowCssClass(MyGridItem item) =>
item.IsArchived ? "row-archived" : null;
}
Para obtener más información, vea ASP.NET Core Blazor `QuickGrid` componente.
Blazor script como recurso web estático
En versiones anteriores de .NET, el script de Blazor se sirve desde un recurso incrustado en el marco compartido de ASP.NET Core. En .NET 10 o posterior, el script de Blazor se sirve como un recurso web estático con compresión automática y huella digital.
Para obtener más información, consulte los siguientes recursos:
Resaltados de la plantilla de ruta
El atributo [Route]
ahora admite el resaltado de sintaxis de ruta para ayudar a visualizar la estructura de la plantilla de ruta:
SignalR
En esta sección se describen las nuevas características de SignalR.
API mínimas
En esta sección se describen las nuevas características de las API mínimas.
OpenAPI
En esta sección se describen las nuevas características de OpenAPI.
Compatibilidad con OpenAPI 3.1
ASP.NET Core ha agregado compatibilidad para generar documentos de OpenAPI versión 3.1 en .NET 10. A pesar del aumento de la versión secundaria, OpenAPI 3.1 es una actualización significativa de la especificación de OpenAPI, en particular con compatibilidad completa con esquema JSON borrador 2020-12.
Algunos de los cambios que verá en el documento openAPI generado incluyen:
- Los tipos anulables ya no tienen la propiedad
nullable: true
en el esquema. - En lugar de una propiedad
nullable: true
, tienen una palabra clavetype
cuyo valor es una matriz que incluyenull
como uno de los tipos.
Con esta característica, la versión predeterminada de OpenAPI para los documentos generados es3.1
. La versión se puede cambiar estableciendo explícitamente la propiedad OpenApiVersion del OpenApiOptions en el parámetro delegado configureOptions
de AddOpenApi.
builder.Services.AddOpenApi(options =>
{
// Specify the OpenAPI version to use.
options.OpenApiVersion = Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_0;
});
Al generar el documento de OpenAPI en tiempo de compilación, se puede seleccionar la versión de OpenAPI estableciendo el --openapi-version
en el elemento de MSBuild de OpenApiGenerateDocumentsOptions
.
<!-- Configure build-time OpenAPI generation to produce an OpenAPI 3.0 document. -->
<OpenApiGenerateDocumentsOptions>--openapi-version OpenApi3_0</OpenApiGenerateDocumentsOptions>
La compatibilidad con OpenAPI 3.1 se agregó principalmente en el siguiente PR.
Cambios importantes en OpenAPI 3.1
La compatibilidad con OpenAPI 3.1 requiere una actualización de la biblioteca de OpenAPI.NET subyacente a una nueva versión principal, 2.0. Esta nueva versión tiene algunos cambios importantes de la versión anterior. Los cambios disruptivos pueden afectar a las aplicaciones si tienen transformadores de documentos, operaciones o esquemas.
Uno de los cambios más significativos es que la clase OpenApiAny
se ha quitado en favor de usar JsonNode
directamente. Los transformadores que usan OpenApiAny
deben actualizarse para usar JsonNode
. La diferencia siguiente muestra los cambios en el transformador de esquema de .NET 9 a .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;
});
Tenga en cuenta que estos cambios son necesarios incluso cuando solo se configura la versión de OpenAPI a 3.0.
OpenAPI en Yaml
ASP.NET ahora admite el servicio del documento OpenAPI generado en formato YAML. YAML puede ser más conciso que JSON, lo que elimina llaves y comillas cuando se pueden deducir. YAML también admite cadenas de varias líneas, que pueden ser útiles para descripciones largas.
Para configurar una aplicación para que sirva el documento OpenAPI generado en formato YAML, especifique el punto de conexión en la llamada MapOpenApi con un sufijo ".yaml" o ".yml", como se muestra en el ejemplo siguiente:
app.MapOpenApi("/openapi/{documentName}.yaml");
Compatibilidad con:
- YAML solo está disponible actualmente para OpenAPI servido desde el endpoint de OpenAPI.
- La generación de documentos de OpenAPI en formato YAML en tiempo de compilación se agrega en una versión preliminar futura.
Consulte este PR que agregó soporte para mostrar el documento OpenAPI generado en formato YAML.
Descripción de la respuesta en ProducesResponseType
Los atributos ProducesAttribute, ProduceResponseTypeAttributey ProducesDefaultResponseType ahora aceptan un parámetro de cadena opcional, Description
, que establecerá la descripción de la respuesta. Este es un ejemplo:
[HttpGet(Name = "GetWeatherForecast")]
[ProducesResponseType<IEnumerable<WeatherForecast>>(StatusCodes.Status200OK, Description = "The weather forecast for the next 5 days.")]
public IEnumerable<WeatherForecast> Get()
{
Y el OpenAPI generado:
"responses": {
"200": {
"description": "The weather forecast for the next 5 days.",
"content": {
contribución comunitaria por Sander ten Brinke
Autenticación y autorización
En esta sección se describen las nuevas características de autenticación y autorización.
Misceláneo
En esta sección se describen varias características nuevas de ASP.NET Core 10.0.
Mejor compatibilidad con las aplicaciones de prueba con instrucciones de nivel superior
.NET 10 ahora tiene mejor soporte para probar aplicaciones que usan instrucciones de nivel superior. Anteriormente, los desarrolladores tenían que agregar manualmente public partial class Program
al archivo Program.cs
para que el proyecto de prueba pudiera hacer referencia al Program class
. public partial class Program
era necesario porque la declaración de nivel superior de C# 9 generó un Program class
, que fue declarado como interno.
En .NET 10, se usa un generador de origen para generar la declaración de public partial class Program
si el programador no la ha declarado explícitamente. Además, se ha agregado un analizador para detectar cuándo public partial class Program
se declara explícitamente y aconseja al desarrollador que lo quite.
Las siguientes solicitudes de incorporación de cambios contribuyeron a esta característica.
Detección de si la dirección URL es local mediante RedirectHttpResult.IsLocalUrl
Use el nuevo método auxiliar de RedirectHttpResult.IsLocalUrl(url)
para detectar si una dirección URL es local. Una dirección URL se considera local si se cumple lo siguiente:
- No tiene la sección de host ni la sección de autoridad.
- Tiene una ruta de acceso absoluta.
Las direcciones URL que usan rutas de acceso virtuales"~/"
también son locales.
IsLocalUrl
es útil para validar las direcciones URL antes de redirigirlas a ellas para evitar ataques de redirección abierta.
if (RedirectHttpResult.IsLocalUrl(url))
{
return Results.LocalRedirect(url);
}
¡Gracias @martincostello por esta contribución!