【发布时间】:2012-12-28 06:32:55
【问题描述】:
我喜欢 OData,我特别高兴它被 ASP.NET Web API 采用。
我创建了一些服务供内部应用程序使用,但从不供公众使用。主要原因是 OData 的开放性似乎很难做到“安全”以防止滥用。
最具体地说,我担心鉴于运行任意查询的能力,用户可能会表达一个复杂的查询,这会给操作系统带来压力,以至于对所有其他用户的体验都不好。
在 WebApi 控制器中,OData 端点暴露如下:
public class OrderController
{
[Queryable]
public IQueryable<Orders> Get()
{
// Compose and return the IQueryable<Orders>
}
}
这可以完全控制查询的组合和执行过程,但通过复杂的IQuerable<T> 接口可以做到这一点。为用户提供信息的子集变得微不足道,例如附加 Where 以仅包含他们有权访问的记录。
是否有 IQueryable<T> 实现可以包装现有的 IQuerable<T> 实例以限制用户可以运行的查询?我最感兴趣的是限制查询的复杂性,但我也希望能够防止用户遍历他们不应访问的资源的关联。
【问题讨论】:
标签: asp.net-web-api odata