我在用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.
我知道O数据操作,但在这种情况下它们不是一个可行的选择,因为我需要得到odata.count
在响应中返回,但无论我做什么,在使用时都无法返回该属性O数据操作(即使在尝试此处建议的内容时:Web API OData Inlinecount 不起作用和这里:Webapi odata 通过实体框架功能进行扩展)。因此,我唯一的选择似乎是创建一个新的 OData API 控制器ServiceInfoResult
实体,这样我就可以避免 OData 操作。但是,正如您在上面所看到的,将参数传递给返回集合的方法似乎会导致其他错误。
有什么解决办法吗?不,我无法更新到 OData v4,因为这会带来一系列其他问题(这将花费比我更多的时间,而且它不支持 DateTime)
UPDATE
感谢@Fan Ouyang,我找到了原因odata.count
JSON 负载中缺少的是我没有返回实体类型。如果ServiceInfoResult
是我数据库中的一个实体,odata.count
会被退回。就因为这个而没有被退回有点愚蠢,但事实就是这样。我想知道是否有任何解决方法。例如,我可以下载源代码,更改 1 行代码并使用它吗?否则,也许我是时候开始研究 OData v4 了。我的项目相当大,所以在我时间有限的情况下,这不是一个好主意。所以,如果有任何替代方案,我想听听。谢谢!
尝试这个示例,CheckoutMany 方法接受参数并返回一个集合https://github.com/OData/ODataSamples/tree/master/WebApi/v3/ODataActionsSample
在CheckOutMany操作方法中添加[EnableQuery]属性,并在requset url中添加$inlinecount查询选项,您可以在payload中看到odata.count
顺便说一句,V4 现在支持日期时间:http://odata.github.io/WebApi/#04-01-datetime-support
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)