我刚读了有关OData的查询ASP.Net的Web API支持,我无法调和查询过滤,基本上提供了集成的数据库完全不考虑抛出任意查询过滤器的功能外曝光最佳的查询计划,不应该在查询等等领域。
一个人如何去消毒的OData的查询,使用户不能直接在这可能会导致性能问题的数据库扔可怕复杂的查询,并可能包含对不应该被执行场的参考?
我刚读了有关OData的查询ASP.Net的Web API支持,我无法调和查询过滤,基本上提供了集成的数据库完全不考虑抛出任意查询过滤器的功能外曝光最佳的查询计划,不应该在查询等等领域。
一个人如何去消毒的OData的查询,使用户不能直接在这可能会导致性能问题的数据库扔可怕复杂的查询,并可能包含对不应该被执行场的参考?
我们正在寻找解决这些问题。 使用Web API RC开始,我们要求您明确标注你的方法用[Queryable]
,以表明您希望加入自动过滤行为。 我们也在寻找一些其他的扩展性/定制的API后,将变得可用。
从根本上说,因为这是一个自动的系统,它需要开发商的部分一些了解才知道所有的性能/安全性的考虑。 在某种意义上,它没有比在参数模型overposting结合(例如,有人张贴了具有IsAdmin属性设置为true,即使您的API从来没有记载,它支持这样的属性的用户对象的问题不同,这是因为该模型的工作键入您的服务器上使用也有IsAdmin属性)。 这种担忧可以通过编写特定的DTO对象严格控制你揭露什么样的数据,并接受作为输入来解决。
在我看来,这是一个使用的OData查询语法的建筑权衡。 如果你不希望人们有不受约束的查询访问,不使用它。 这是相同的,SQL视图与SQL存储过程的参数。
网络API有特殊的处理机制。 所以,你可以检查和从用户持续进行的过程的查询。
http://www.asp.net/web-api/overview/working-with-http/http-message-handlers
但对于OData的查询是不常见的,从数据库中暴露的IQueryable。 常见的做法是让一般的查询,“prequeried”服务器和不是给查询或过滤此prequeried结果用户的能力。 比你一定会认为用户是不是能够让查询“宽”比prequeried结果。
而作为一个提示:的WebAPI只有一个用于过滤器,顶部,跳跃,排序依据的支持。 所以非常有限。 对于正常的OData支持 - 使用WCF数据服务
当你想从用户过滤隐藏/查询某些列,不止一种方法是编写自定义处理程序,将用户解析URI并返回例如403错误,或者作为一种变型,使DTO的对象,而这些列,揭露他们的“预查询”用户。