Ho un controller semplice come questo (1 ° codice) e funziona perfettamente, ma quando aggiungo .Include di includere una relazione con un'altra tabella, quindi smette istantaneamente di restituire ObjectResult corretto ( nonostante sia pieno di dati ).
Postman restituisce:
Impossibile ottenere alcuna risposta Si è verificato un errore durante la connessione a http: // localhost: 51111 / data / test . Perché questo potrebbe essere accaduto: il server non è stato in grado di inviare una risposta: assicurarsi che il backend funzioni correttamente. I certificati SSL autofirmati sono bloccati: risolvere questo problema disattivando la verifica del certificato SSL in Impostazioni> proxy generale configurato in modo errato il proxy è configurato correttamente in Impostazioni> Timeout richiesta proxy: modifica del timeout della richiesta in Impostazioni> Generale
Nessuna eccezione si verifica, né nessun campo è nullo.
public IActionResult test()
{
var user = _context.UsersTable
.SingleOrDefault(p => p.Id.ToString().Length > 0);
return new ObjectResult(user);
}
public IActionResult test()
{
var user = _context.UsersTable
.Include(x => x.Items)
.SingleOrDefault(p => p.Id.ToString().Length > 0);
return new ObjectResult(user); // data IS in the user, even relational collection is filled with data, but it just does not return.
}
public class User
{
[Key]
public Guid Id { get; set; }
public virtual ICollection<Item> Items { get; set; } = new HashSet<Items>();
protected User()
{
}
public User(string login, string password)
{
(...)
}
}
public class Item
{
[Key]
public Guid Id { get; set; }
public string ItemName { get; set; }
// Relation to User
public Guid UserId { get; set; }
public virtual User User { get; set; }
protected Item()
{ }
public Item(string name, User user)
{
Id = Guid.NewGuid();
UserId = user.Id;
ItemName = name;
}
}
public class AppContext : DbContext
{
public AppContext(DbContextOptions<AppContext> options) : base(options)
{
Database.SetCommandTimeout(20000);
}
public DbSet<User> UsersTable { get; set; }
public DbSet<Item> ItemsTable{ get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
}
}
Finora ho provato:
user.Items = user.Items.ToList ();
Soluzione: https://stackoverflow.com/a/48608081/10074551
var options = new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
return Json(documents, options);