1

我有一个公开 OData API 资源的 Web API 服务。逻辑流程很简单:该Get()方法调用存储库以获取所有人(人),并且由于 OData 配置,查询字符串上的 OData 命令的结果过滤会在我的 API 控制器中自动发生。

但是,我的People结果集变得越来越大,所以我已经实现了它的缓存(因为它大部分是静态的并且每天只更新)并且效果很好。在某些时候,我可能需要将作为 OData 请求的一部分的过滤放置到存储库查询中,而不是拉回整个数据集然后进行过滤。

最近在代码营中,我认为有人提到您可以访问 API 调用中使用的 OData 命令,这需要手动解释这些命令并在查询中手动应用它们。

有没有办法查看控制器中的 API 调用中存在哪些 OData 命令,以便我可以急切地过滤我的结果?

4

2 回答 2

2

请参阅“直接调用查询选项”下的http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options 。除了使用 Queryable 属性,您还可以使用备用签名来访问选项,从而为您提供有关正在执行的查询的信息。

于 2013-05-17T21:25:29.153 回答
0

实际上,经过进一步审查,我发现有一种更简单的方法可以提取和检查查询选项。尝试ODataQueryOptions在调用中使用参数时,GET我遇到了以下错误:

Multiple actions were found that match the request

根据ASP.NET WebAPI OData - Inheriting from EntitySetController<> 但使用 Get(ODataQueryOptions options) 而不是 [Queryable]Get()这是因为EntitySetController已经定义了 Get 方法。但是EntitySetController定义了一个QueryOptions我不知道的参数,如下所示可以直接访问,并且是检查 OData 命令参数的最简单方法:

public override IQueryable<Pharmacy> Get()
{
    //Inspect the query options passed in on the query string
    var opts = this.QueryOptions 

}
于 2013-05-23T15:52:06.567 回答