Asp.Net Web API 2.0,从Get()操作方法获取复杂的对象

时间:2018-08-21 08:55:44

标签: asp.net asp.net-mvc asp.net-web-api asp.net-web-api2 asp.net-core-2.0

我有两个模型类 ServiceProvider.cs & Club.cs,一个服务提供商可以在其中提供许多俱乐部。但是ServiceProvider.cs中有俱乐部的虚拟集合。如下图所示

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服务器,如果我返回存储库的_serviceProvider GetAll()方法,则该方法运行良好,并且我获得了所有serviceprovider对象在PostMan中。

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

但是,如果我返回存储库的GetAllWithClubs()方法,则会在此处出现运行时异常。 问题是:我无法让所有服务提供商以及他们的clubs集合一起获得。但是,我已经调试了代码,然后在这里提问,我使所有服务提供商以及他们的clubs集合都完美了。精细。我确信从数据库中获取数据是可以的,问题是从Get()Action方法发送回响应。

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

我在邮递员中遇到的错误是 enter image description here Visual Studio中的输出是 enter image description here

我在.toList()前面搜索了GetAllWithClubs()的搜索解决方案,并返回了Asp.net core 2.1附带的ActionResult(我的情况不支持) 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>();
    }

1 个答案:

答案 0 :(得分:0)

上面的代码中的

问题:是 Json .net自引用循环检测,而解决方案是,我们必须忽略循环引用而不要序列化它们为了在Asp.net MVC 2.0中执行此操作,我们必须将此代码放入Startup.cs中。

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

重建,问题解决了。