Cześć. Mam trochę dziwny problem, mam wrażenie, ze coś jest nie tak z danymi które pobieram z bazy danych.
Mam taki kontroler:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using GetWork.Data;
using GetWork.Models.Domain;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Cors;
namespace GetWork.Controllers.Api
{
[Produces("application/json")]
[EnableCors("SiteCorsPolicy")]
public class ConversationsApiController : Controller
{
private ApplicationDbContext _context;
public ConversationsApiController(ApplicationDbContext context)
{
_context = context;
}
// GET: api/Conversations/5
[HttpGet]
[Route("api/conversations/getconversations/{id}")]
public List<Conversation> GetConversations(int id)
{
var jobs = _context.Job.
Include(c => c.Conversations).Where(j => j.ID == id).SingleOrDefault();
return jobs.Conversations ?? new List<Conversation>();
}
}
}
Metoda GetConversations pięknie działa, jak zwrócę pustą listę albo jakąś utworzoną na sztywno, natomiast jak wyciągnę dane wedle powyższego zapytania, do w przeglądarce dostaję błąd net::ERR_CONNECTION_RESET. Nie do końca rozumiem, o co może chodzić- o rozmiar odpowiedzi?
EDIT: Naprawione, zmieniłem zapytanie na logiczniejsze, ale w sumie zastanawiam się, czemu ono nie działało.
Rozwiązanie dla potomnych:
Problem miałem z modelem- obiekt Job zawiera kolekcję obiektów Conversation, a Conversation zawiera obiekt Job, to którego on przynależy. Wszystko fajnie działa, dopóki nie spróbujemy tego poddać serializacji- z powodu circular reference wywalany jest wyjątek. Zrozumiałem, dlaczego powinno się używać DTO zamiast czystego modelu. :D
Opcjonalnie w konfiguracji można dodać taką linię:
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
Ignoruje ona takie referencje i ich nie dołącza do JSON'a..