使用WCF数据服务限制或修改OData源的查询

时间:2011-10-26 22:22:26

标签: wcf-data-services odata

如果我使用WCF数据服务通过OData公开对象集合,并且我想阻止用户进行可能过于复杂或消耗太多资源的查询,并且我能够以某种方式挂钩查询结果会被退回吗?

据我所知,如果用户在客户端执行LINQ查询,则会将其转换为包含所有查询参数的REST URL,然后在服务器端完成查询。如果是这样,这就是我想要以某种方式挂钩并可能将它们仅限于某些操作。

1 个答案:

答案 0 :(得分:1)

在服务器上,每个incomming查询都被转换为LINQ表达式,然后针对数据上下文公开的IQueryable执行该表达式。您可以包装IQueryable,检查要执行的LINQ,如果发现它太复杂,则会失败。 我写了一系列关于LINQ表达式树的博客文章,服务将生成它们以及它们映射到哪些查询。 http://blogs.msdn.com/b/vitek/archive/2010/02/25/data-services-expressions-part-1-intro.aspx 第二部分还有一个如何拦截查询的示例(那里的示例将其写出来,但您也可以在那里添加检查代码)。