RDG006: parámetros de constructor no válidos
Valor | |
---|---|
Identificador de la regla | RDG006 |
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 de conexión contiene un controlador de ruta con un parámetro anotado con el atributo [AsParameters]
que contiene un constructor no válido.
Descripción de la regla
Los tipos que se usan para el enlace suplente a través del atributo [AsParameters]
deben contener un constructor parametrizado público donde todos los parámetros del constructor coinciden con las propiedades públicas declaradas en el tipo. El tipo TodoRequest
genera este diagnóstico porque no hay ningún parámetro de constructor coincidente para la propiedad Todo
.
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(int id, string name)
{
public int Id { get; set; } = id;
public Todo? Todo { get; set; }
}
record Todo(int Id, string Task);
[JsonSerializable(typeof(Todo[]))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{
}
Cómo corregir infracciones
Asegúrese de que todas las propiedades del tipo tengan un parámetro coincidente en el constructor.
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(int id, Todo? todo)
{
public int Id { get; set; } = id;
public Todo? Todo { get; set; } = todo;
}
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 provoca una excepción en tiempo de ejecución 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