我正在使用 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的时候了。我所拥有的项目相当大,所以我的时间很短,这不是一个好主意。所以,如果有其他选择,我想听听他们的意见。谢谢!
答案 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