【发布时间】:2015-12-03 15:33:36
【问题描述】:
我有一个关于带有“实体集合或实体引用”类型参数的 OData 绑定函数的问题。当我尝试调用该函数时,我没有进入我的函数,而是收到 HTTP 错误(见下文)。此参数类型的描述来自http://odata.github.io/WebApi/#04-06-function-parameter-support。 我正在使用 ASP.Net MVC 2 和 ASP.NET OData 5.7.0(编程语言 C#)实现 OData V4 服务。
我的函数代码:
[HttpGet]
public IHttpActionResult GetTimeSeriesTest2([FromODataUri] IEnumerable<Tag> tags)
{
... some Code
}
我在模型中的函数声明代码:
var tag = builder.EntityType<Tag>();
funcCol = tag.Collection.Function("GetTimeSeriesTest2");
funcCol.ReturnsCollectionFromEntitySet<Measurement>("Measurements");
funcCol.CollectionEntityParameter<Tag>("tags");
有一个标签实体可访问的“标签”集合,标签有一个字符串类型的键。查询标签集合并获取单个标签工作正常(例如 http://localhost:51100/odata/Tags('0') )
WebApiConfig.cs中对OData路由的调用:
config.MapODataServiceRoute("OData", "odata", model: GetEdmModel());
我的 OData 查询在 Internet Explorer 中使用:
有查询:
http://localhost:51100/odata/Tags/Default.GetTimeSeriesTest2(tags=@x)?@x={\"value\":[{\"@odata.id\":\"http://localhost:51100/odata/Tags(' 0')\"}]}
-> 我收到 HTTP 错误 404.0 – 未找到。
如果我使函数未绑定并在没有命名空间“默认”的情况下调用它,则执行该函数但 tags 参数为空。 如果我将 IEnumerable 类型从 Tag 更改为 Int 并使用以下查询,一切正常: http://localhost:51100/odata/Tags/Default.GetTimeSeriesTest2(tags=@x)?@x=[4,5,6]
出了什么问题以及如何解决?
欢迎和赞赏任何帮助。
提前致谢
克劳斯-彼得
【问题讨论】:
标签: c# asp.net web-services odata