如何在Web API中检查OData Command集合?

时间:2013-05-17 20:35:38

标签: asp.net-web-api odata

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

Multiple actions were found that match the request

根据ASP.NET WebAPI OData - Inheriting from EntitySetController<> but using Get(ODataQueryOptions options) rather than [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 

}