Sto riscontrando alcuni problemi che ritengo siano legati all'autoreferenziazione utilizzando l'API Web di .NET Core e Entity Framework Core. La mia API Web inizia a soffocare quando ho aggiunto. Include alcune proprietà di navigazione.
Ho trovato quella che sembra essere una soluzione nella vecchia API Web, ma non so come implementare la stessa cosa per .NET Core Web API (sono ancora nelle prime fasi di apprendimento).
La soluzione più vecchia stava incollando questo nel Application_Start () del Global.asax:
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
Sospetto che questo sia gestito nel metodo ConfigureService () di StartUp ma non conosco molto oltre.
O c'è un modo più appropriato per gestire questo problema?
Ok ... Ho finalmente trovato del materiale di riferimento su questo. La soluzione è:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddMvc()
.AddJsonOptions(
options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
);
...
}
L'ho preso da qui
Se si utilizza ASP.NET Core 3.0 e si riscontra questo problema, installare il pacchetto NuGET: Microsoft.AspNetCore.Mvc.NewtonsoftJson 3.0.0 .
Per sostituire il nuovo System.Text.Json che non ha ancora la gestione dei loop di riferimento, eseguire questa operazione in Startup.cs, assicurarsi che in ConfigureServices sia incluso:
Se si utilizza l'ultimo metodo .Net Core 3.0:
services.AddControllers().AddNewtonsoftJson(options =>
{
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
o alla vecchia maniera:
services.AddMvc(option => option.EnableEndpointRouting = false)
.AddNewtonsoftJson(options =>
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore)
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0);