Asp.Net Web API 2.0,从 Get() 操作方法返回一个复杂的 object

Asp.Net Web API 2.0, Getting a complex object back from Get() action method

我有两种型号类ServiceProvider.cs & Club.cs一个服务提供商可以有很多俱乐部。但是 ServiceProvider.cs 中有一个虚拟的 collection 俱乐部。如下图

public class ServiceProvider 
{
    public int ServiceProviderId { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public string PhoneNo { get; set; }

    public virtual ICollection<Club> Clubs { get; set; }
}
public class Club 
{
    public int ClubId { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }

    public virtual ServiceProvider serviceProvider { get; set; }
    public int ServiceProviderId { get; set; }
}

我已经实施了存储库模式来查询 MS Sql 服务器,如果我 return 我的存储库 _serviceProvider GetAll() 方法工作正常,我在 PostMan.

中获得了所有服务提供商 objects
public IEnumerable<ServiceProvider> Get()
    {
        return _serviceProvider.GetAll();
    }

但是如果我 return 存储库的 GetAllWithClubs() 方法然后我在这里得到 运行 时间异常。 问题是:我无法获得所有服务提供商及其俱乐部 collection。 但是,我已经调试了我的代码,然后再在这里提问,我得到了所有服务提供者及其俱乐部 collection 非常好。我确定从数据库中获取数据没问题,问题是从 Get() 操作方法发送回响应。

public IEnumerable<ServiceProvider> Get()
    {
        return _serviceProvider.GetAllWithClubs();
    }

我进入 Postman 的错误是 在visual studio中的输出是

我已经 尝试在 GetAllWithClubs() 前面搜索 .toList() 的解决方案 加上 returning ActionResult ActionResult Asp.net 核心 2.1(我的案例 2.0 不支持)。我相信这不是一个重复的问题。 GetAll()GetAllWithClubs() 方法的实现如下。

public IEnumerable<ServiceProvider> GetAllWithClubs()
    {
        return _context.ServiceProviders
            .Include(c => c.Clubs);
    }

Repository.cs

public IEnumerable<T> GetAll()
    {
        return _context.Set<T>();
    }
上面代码中的

问题:是Json.net自引用循环检测解决方案 是,我们必须 忽略循环引用而不是序列化它们 为了在 Asp.net MVC 2.0 中这样做,我们必须将这段代码放在 Startup.cs.

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

重建,问题解决。