7

我有一个 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我应该可以使用它们吗?

4

4 回答 4

7

如本博文所述,ASP.NET Web API 仅提供对 OData 的有限支持。我没有看到您在该列表中提到的查询参数。

于 2012-08-28T15:21:54.430 回答
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

于 2012-09-02T07:24:05.917 回答
2

对 $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/但我还没有验证自己。

于 2013-01-18T18:07:44.793 回答
1

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

于 2013-04-28T21:16:35.043 回答