【问题标题】:How to inspect OData Command collection in Web API?如何在 Web API 中检查 OData 命令集合?
【发布时间】:2013-05-23 23:52:06
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: asp.net-web-api odata


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

    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 
    
    }
    

    【讨论】:

      猜你喜欢
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多