我有一个公开OData API资源的Web API服务。逻辑流程很简单:Get()
方法调用存储库以获取所有(人员),并且由于OData配置,查询字符串上的OData命令会自动在我的API控制器中进行过滤。 / p>
但是,我的People
结果集越来越大,所以我已经实现了缓存(因为它主要是静态的,每天只更新)并且效果很好。在某些时候,我可能需要将作为OData请求的一部分的过滤放到存储库查询中,而不是拉回整个数据集,然后然后进行过滤。
最近在代码阵营中,我认为你可以访问API调用中使用的OData命令,并且需要手动解释这些命令并在查询中手动应用它们。
有没有办法看到控制器中的API调用中存在哪些OData命令,以便我可以急切过滤我的结果?
答案 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
}