Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Valore | |
---|---|
ID della regola | RDG005 |
La modifica è dirompente o non dirompente | Non separabile |
Causa
Questa diagnostica viene generata dal generatore di delegati di richiesta quando un endpoint contiene un gestore di route con un parametro annotato con l'attributo [AsParameters]
che è un tipo astratto.
Descrizione della regola
L'implementazione dell'associazione surrogata tramite l'attributo [AsParameters]
nelle API minime supporta solo i tipi con implementazioni concrete. L'uso di un parametro con un tipo astratto come nell'esempio seguente produce la diagnostica.
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
{
}
Come correggere le violazioni
Usare un tipo concreto per il surrogato:
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
{
}
Quando eliminare gli avvisi
Questo avviso non deve essere eliminato. L'eliminazione dell'avviso comporterà un'eccezione di runtime associata allo stesso avviso.