C# 无法使用oData查询选项

C# 无法使用oData查询选项,c#,asp.net-web-api,odata,asp.net-web-api-odata,C#,Asp.net Web Api,Odata,Asp.net Web Api Odata,我有一个ASP.NET Web API项目。我试图将一些查询选项传递给我的API控制器,如下所示: http://localhost:61736/api/Enquiries? callback=callback&$top=30&$skip=30&orderby=EnquiryId &$inlinecount=allpages&_=1346164698393 但我得到了以下信息: 不支持查询参数“$inlinecount”。 当我尝试使用$callback

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

http://localhost:61736/api/Enquiries?
callback=callback&$top=30&$skip=30&orderby=EnquiryId
&$inlinecount=allpages&_=1346164698393
但我得到了以下信息:

不支持查询参数“$inlinecount”。

当我尝试使用
$callback
$format


知道我做错了什么吗?根据:我应该能够使用它们吗?

ASP.NET Web API对OData的支持有限,因为我没有看到您在该列表中提到的查询参数。

在当前版本中,Web API只支持$filter、$orderby、$top和$skip。您可以重写QueryableAttribute以添加对OData协议的更多支持。公共nuget发布后的签入已使ValidateQuery方法虚拟,以便您可以重写它以绕过验证。请尝试我们的夜间建造在

您还可以使用ODataQueryOptions。以下代码相当于[Queryable]属性,只是当它看到不支持的选项时不会引发异常

public IEnumerable<Product> Get(ODataQueryOptions options) 
{
    return options.ApplyTo(_db.Products as IQueryable) as IEnumerable<Product>; 
}
public IEnumerable Get(ODataQueryOptions选项)
{
返回选项。ApplyTo(_db.Products作为IQueryable)作为IEnumerable;
}
您可以通过ODataQueryOptions.RawValues.inlinecount获得$inlinecount。
有关OData查询支持的详细信息,请参阅:

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

修订版:ed65e90e83c8f9391b4f4806d305c83f55d28ff6
作者:youssefm
日期:2012年12月6日下午1:51:44
信息:
[OData]添加对$inlinecount查询选项的支持

我相信夜间软件包是推送到的,但我还没有验证自己。

如果您碰巧使用了KendoUI,请解释如何通过切换到JSON而不是JSONP来禁用一些选项,例如$callback。

我想您可以创建一个ApiController,它将是基于OData的常规服务的代理。OData服务实际上会执行查询,而您的控制器只会返回响应。当前的夜间构建没有抱怨$inlinecount,但它也没有提供包含count的正确格式的响应(例如,行为没有改变)现在它是支持剑道现在支持ODataV4,不再需要任何调整使其工作。您可以将数据集类型从类型“odata”更改为类型:“odata-v4”谢谢@choco,但我很久以前就放弃了odata,太乱了
Revision: ed65e90e83c8f9391b4f4806d305c83f55d28ff6
Author: youssefm < youssefm@microsoft.com >
Date: 12/6/2012 1:51:44 PM
Message:
[OData] Add support for the $inlinecount query option