带.Include的实体框架核心API返回表

时间:2018-08-30 21:17:52

标签: rest api .net-core entity-framework-core

我有一个具有ICollection的模型:

public class Blog
{
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }

    public ICollection<Posts> Posts { get; set; }
}

这可用于MVC:

public async Task<IActionResult> Index()
{
    return View(await _context.Blog.Include(l => l.Posts).ToListAsync());
}

我尝试使用 API控制器

[Route("api/[controller]")]
[ApiController]
....
[HttpGet]
public IEnumerable<Blog> GetAll()
{
    return _context.Blog.Include(l => l.Posts).ToList();
}

这会产生错误:

语法错误:JSON.parse:JSON数据第1行第44列中对象的属性值之后的数据结尾

如何返回带有Blogs的多维Json,以及对于每个Blog条目所有帖子?

2 个答案:

答案 0 :(得分:2)

解决方案:

这是JSON序列化中的错误。

将Startup.cs添加到Mvc ConfigureServices:

services.AddMvc()
            .AddJsonOptions(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

答案 1 :(得分:0)

尝试一下

[Route("api/[controller]")]
[ApiController]
 ....
[HttpGet]
public IActionResult GetAll()
{
   return Ok(_context.Blog.Include(l => l.Posts).ToList());
}

如果您尝试将IActionResult异步包装在Task中