这个问题处理来自这两个差异控制器(API 与 OData)的返回 JSON 结果的不同“大小”。
一些实体例如:(这是一个糟糕的组合,它只是为了说明一个观点,请不要判断这些实体之间的关系)
public class Customer
{
public string Name { get; set; }
public Category Category { get; set; }
}
public class Category
{
public string CategoryName { get; set; }
public List<Customers> CustomersInCategory { get; set; }
}
当向OData控制器发出 GET 请求时,请说:
GET http://localhost:81/Customers
结果将不包含客户的类别对象,除非我在 URL 上明确提及“$expand=Category”。
但是,对API控制器的相同请求将返回客户的类别对象(即使结果是 IQueryable<Customer>)。这样做的问题是,在实体之间存在循环关系的情况下,结果会递归地变平,变得巨大(可能是无穷大)。
我一直在寻找解决这个问题的方法,发现像 MaxDepth 这样不起作用的东西以及许多其他没有结果的东西。
我真正想要的是一种“告诉”API 控制器或其方法“不要扩展结果”的方法——或者更好的是,忽略循环引用(我也尝试过但没有奏效)。
更新:这是 API 控制器上的 GET 方法:
[HttpGet]
[ActionName("DefaultAction")]
public IQueryable<Customer> Get()
{
return _unitOfWork.Repository<Customer>().Query().Get();
}
谢谢。