将参数传递给返回集合的OData(GET)方法

时间:2015-08-05 03:06:22

标签: asp.net-mvc asp.net-web-api odata

我正在使用 OData v3 。如何将参数传递给 OData 控制器并返回集合?我想要做的例子:

[EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All)]
public IQueryable<ServiceInfoResult> Get([FromODataUri] int instanceId)
{
    //etc
}

当我测试时,我收到此错误:

No HTTP resource was found that matches the request URI 'http://localhost:30863/odata/ServiceInfoResultApi(1)'.
No action was found on the controller 'ServiceInfoResultApi' that matches the request.

我知道 OData操作,但在这种情况下它们不是可行的选项,因为我需要在响应中返回odata.count,但无论我做什么,使用 OData操作时,我无法返回该属性(即使在尝试此处建议时:Web API OData Inlinecount not working和此处:Webapi odata expand with entity framework functions)。因此,似乎我唯一的选择是为ServiceInfoResult实体创建一个新的OData API控制器,以便我可以避免OData操作。但是,如上所示,将参数传递给返回集合的方法似乎会导致其他错误。

任何解决方案?不,我无法更新到OData v4,因为它提出了许多其他问题(它需要比我更多的时间,而且它不支持DateTime)

更新

感谢@Fan Ouyang,我发现JSON有效负载中odata.count丢失的原因是我没有返回实体类型。如果ServiceInfoResult是我的数据库中的实体,则会返回odata.count。有点愚蠢,因为它没有被归还,但这就是它的原因。我想知道是否有任何解决方法。例如,我可以下载源代码,更改1行代码并使用它吗?否则,也许是我开始关注OData v4的时候了。我所拥有的项目相当大,所以我的时间很短,这不是一个好主意。所以,如果有其他选择,我想听听他们的意见。谢谢!

2 个答案:

答案 0 :(得分:1)

尝试此示例,CheckoutMany方法获取参数并返回集合https://github.com/OData/ODataSamples/tree/master/WebApi/v3/ODataActionsSample

在CheckOutMany操作方法中添加[EnableQuery]属性,并在requset url中添加$ inlinecount queryoption,您可以在有效负载中看到odata.count

顺便说一下,V4现在支持日期时间:http://odata.github.io/WebApi/#04-01-datetime-support

答案 1 :(得分:0)

最近修复了5.7版本(现在为复杂类型的集合返回@ odata.count)。更多信息: https://github.com/OData/WebApi/issues/484#issuecomment-153929767