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 | RDG004 |
La modifica è dirompente o non dirompente | Nessuna interruzione |
Causa
Questa diagnostica viene generata dal generatore di delegati di richiesta quando un endpoint contiene un gestore di route con un tipo restituito anonimo.
Descrizione della regola
Il Request Delegate Generator viene eseguito in fase di compilazione e deve essere in grado di analizzare in modo statico i gestori delle route in un'app. I tipi anonimi vengono generati con un nome di tipo noto solo al compilatore e non sono analizzabili staticamente. L'endpoint seguente produce il diagnostico.
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.MapGet("/v1/todos", () => new { Id = 1, Task = "Write tests" });
app.Run();
record Todo(int Id, string Task);
[JsonSerializable(typeof(Todo[]))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{
}
Come correggere le violazioni
Dichiarare il gestore di route con un tipo concreto come tipo di ritorno.
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.MapGet("/v1/todos", () => new Todo(1, "Write tests fix"));
app.Run();
record Todo(int Id, string Task);
[JsonSerializable(typeof(Todo[]))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{
}
Quando eliminare gli avvisi
Questo avviso può essere eliminato in modo sicuro. In caso di eliminazione, il framework esegue il fallback alla generazione del delegato di richiesta in fase di esecuzione.