RDG005: tipo abstracto no válido
Valor | |
---|---|
Identificador de la regla | RDG005 |
La corrección es problemática o no problemática | Poco problemático |
Causa
Este diagnóstico lo emite el generador de delegados de solicitudes cuando un punto final contiene un controlador de ruta con un parámetro anotado con el atributo [AsParameters]
que es un tipo abstracto.
Descripción de la regla
La implementación del enlace suplente a través del atributo [AsParameters]
en las API mínimas solo admite tipos con implementaciones concretas. El uso de un parámetro con un tipo abstracto como en el ejemplo siguiente genera el diagnóstico.
using System.Text.Json.Serialization;
var builder = WebApplication.CreateSlimBuilder(args);
builder.Services.ConfigureHttpJsonOptions(options =>
{
options.SerializerOptions.TypeInfoResolverChain.Insert(0,
AppJsonSerializerContext.Default);
});
var app = builder.Build();
app.MapPut("/v1/todos/{id}",
([AsParameters] TodoRequest todoRequest) => Results.Ok(todoRequest.Todo));
app.Run();
abstract class TodoRequest
{
public int Id { get; set; }
public Todo? Todo { get; set; }
}
record Todo(int Id, string Task);
[JsonSerializable(typeof(Todo[]))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{
}
Cómo corregir infracciones
Use un tipo concreto para el suplente:
using System.Text.Json.Serialization;
var builder = WebApplication.CreateSlimBuilder(args);
builder.Services.ConfigureHttpJsonOptions(options =>
{
options.SerializerOptions.TypeInfoResolverChain.Insert(0,
AppJsonSerializerContext.Default);
});
var app = builder.Build();
app.MapPut("/v1/todos/{id}",
([AsParameters] TodoRequest todoRequest) => Results.Ok(todoRequest.Todo));
app.Run();
class TodoRequest
{
public int Id { get; set; }
public Todo? Todo { get; set; }
}
record Todo(int Id, string Task);
[JsonSerializable(typeof(Todo[]))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{
}
Cuándo suprimir las advertencias
Esta advertencia no debe suprimirse. La supresión de la advertencia provocará una excepción en runtime asociada con la misma advertencia.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de