Condividi tramite


RDG004: impossibile risolvere il tipo anonimo

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.