提前了解“仅仅因为提供了一项功能并不能使它成为一个好主意”的警告......
从外观上看,符合 OData 的签名要求您返回 IQueryable。
例如:
[Queryable]
public IQueryable<MyModel> Get()
{
return _repo.GetAll().AsQueryable();
}
但是,最近和最近的许多文章将 IQueryable 描述为:
- 泄漏
- ' Causing Heavy Lifting ' 示例:允许用户抓取整张桌子
- 存在安全和扩展问题,因为它允许对查询本身进行大量修改
- 也可能导致延迟执行的问题(因为它的可查询性质)
我的问题是:
您是否觉得 IQueryable 和 OData 的功能超过了上述问题?
在回答时,我希望人们谈论:
- 为什么或者为什么不?
- 我应该什么时候使用它?
- 您只在某些 WebAPI 调用中使用...还是用于所有 WebAPI 调用?
- 那些不是 IEnumarable 对象的个别模型呢?
...像这样的东西。
背景:我问的不仅仅是因为上面列出的项目。还因为 OData 作为“行业标准”而不是您工具箱中的工具出售给我们。因此,实现这一点将从根本上改变我们的 WebAPI 调用(我目前工作的地方)的返回。我们必须从我们自己的 IResult 返回签名(这非常有用)转到似乎有问题的 IQueryable(但最终也可能有用)。
结果示例:
至少,我们的返回签名会发生巨大变化。而且,我被告知通过将“C Instance”更改为“IQueryable Instance”(这是有道理的)来实现 OData 的 WebAPI 调用不会起作用。
public interface IResult<C>
{
[JsonProperty(PropertyName = "hasErrors")]
bool HasErrors { get; }
[JsonProperty(PropertyName = "errors")]
IList<String> Errors { get; }
[JsonProperty(PropertyName = "instance")]
C Instance { get; set; }
}