【发布时间】:2015-10-27 15:40:58
【问题描述】:
我正在使用 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 的时候了。我的项目很大,所以在我的时间很短的情况下,这不是一个好主意。所以,如果有任何替代方案,我想听听。谢谢!
【问题讨论】:
标签: asp.net-mvc asp.net-web-api odata