【问题标题】:Not able to use oData query options无法使用 oData 查询选项
【发布时间】:2012-08-23 02:44:23
【问题描述】:

我有一个 ASP.NET Web API 项目。我正在尝试将一些查询选项传递给我的 API 控制器,如下所示:

http://localhost:61736/api/Enquiries?
callback=callback&$top=30&$skip=30&orderby=EnquiryId
&$inlinecount=allpages&_=1346164698393

但我得到以下信息:

The query parameter '$inlinecount' is not supported.

当我尝试使用$callback$format时,我也得到了同样的结果

知道我做错了什么吗?根据:http://msdn.microsoft.com/en-us/library/ff478141.aspx我应该可以用吧?

【问题讨论】:

标签: c# asp.net-web-api odata asp.net-web-api-odata


【解决方案1】:

ASP.NET Web API 仅对 OData 提供有限支持 documented in this blog post. 我没有看到您在该列表中提到的查询参数。

【讨论】:

  • 我想你可以创建一个 ApiController 来作为常规 OData 服务的代理。 OData 服务实际上会执行查询,而您的控制器只会返回响应。
【解决方案2】:

在当前版本中,web api 仅支持 $filter、$orderby、$top 和 $skip。您可以覆盖 QueryableAttribute 以添加对 OData 协议的更多支持。公共 nuget 发布后的签入使 ValidateQuery 方法成为虚拟方法,以便您可以覆盖它以绕过验证。请在http://www.myget.org/F/aspnetwebstacknightly/ 尝试我们的夜间构建。

您也可以使用 ODataQueryOptions。下面的代码等价于 [Queryable] 属性,只是它在看到不支持的选项时不会抛出异常。

public IEnumerable<Product> Get(ODataQueryOptions options) 
{
    return options.ApplyTo(_db.Products as IQueryable) as IEnumerable<Product>; 
}

您可以通过 ODataQueryOptions.RawValues.InlineCount 获取 $inlinecount。 OData查询支持详情请见:http://blogs.msdn.com/b/alexj/archive/2012/08/21/web-api-queryable-current-support-and-tentative-roadmap.aspx

【讨论】:

    【解决方案3】:

    对 $inlinecount 的支持已于 2012 年 12 月 6 日签入项目,大概下一个版本将包含此支持。您可以下载最新的源代码或获取夜间版本:

    http://aspnetwebstack.codeplex.com/SourceControl/changeset/ed65e90e83c8

    Revision: ed65e90e83c8f9391b4f4806d305c83f55d28ff6
    Author: youssefm < youssefm@microsoft.com >
    Date: 12/6/2012 1:51:44 PM
    Message:
    [OData] Add support for the $inlinecount query option
    

    我相信每晚的包裹被推送到http://www.myget.org/F/aspnetwebstacknightly/,但我还没有验证自己。

    【讨论】:

    • 当前的夜间构建不会抱怨 $inlinecount,但它也没有提供包含计数的格式正确的响应(例如,行为没有变化。)
    【解决方案4】:

    如果您有机会使用 KendoUI,this post 解释了如何通过切换到 JSON 而不是 JSONP 来禁用某些选项,例如 $callback。

    【讨论】:

    • Kendo 现在支持 ODATA V4,不再需要任何调整即可使其正常工作。您可以将数据集类型从 type: 'odata' 更改为 type: 'odata-v4'
    • 感谢@choco,但我很久以前就放弃了 oData - 太乱了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 2013-11-20
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 2015-05-12
    相关资源
    最近更新 更多