从WebApi Core包含未完成响应

时间:2019-05-18 16:27:34

标签: c# asp.net-core asp.net-core-webapi asp.net-core-2.1

我有两个模型类。

Projects

public class Project
{
    public Project()
    {
    }

    [Key]
    public int Id { get; set; }

    public string Tag { get; set; }

    public string Name { get; set; }

    public string Description { get; set; }

    public virtual List<Task> Tasks { get; set; }
}

还有Tasks

public class Task
{
    public Task()
    {
    }

    [Key]
    public int Id { get; set; }

    [ForeignKey("Project")]
    public int ProjectId { get; set; }

    public Project Project { get; set; }

    public string Name { get; set; }

    public string Description { get; set; }

    public Priority Priority { get; set; }

    public int? StoryPoints { get; set; }

    public DateTime? StartTime { get; set; }

    public DateTime? EndTime { get; set; }
}

我有一个简单的ProjectControllerGetProjects方法:

    [HttpGet]
    public IEnumerable<Project> GetProjects()
    {
        return context.Projects.Include(t => t.Tasks);
    }

但是从这个GET,我得到的东西看起来像这样:

enter image description here

如您所见,tasks被切断。

但是当我删除Include时:

    [HttpGet]
    public IEnumerable<Project> GetProjects()
    {
        return context.Projects;
    }

一切正常:

enter image description here

但是,当然,我们没有任务。

我的问题是,如何使包含Tasks的内容与.Net Core 2.1 WebApi一起投影?那里发生了什么事?

PS。我尝试了ToList()IActionResult的{​​{1}}和ObjectResponse,它们的工作原理相同(剪切的任务和项目)。 Postman无法从中得到任何东西,这就是为什么即时通讯使用chrome向您展示情况的原因

1 个答案:

答案 0 :(得分:0)

问题解决了。您需要添加:

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

在您的Startup.cs中,一切正常