我有一个关于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");
可以访问标签实体的“标签”集合,标签具有字符串类型的键。查询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')\“}]}
- &GT;我收到HTTP错误404.0 - 未找到。
如果我使函数解除绑定并在没有命名空间“默认”的情况下调用它,则执行该函数但是tags参数为空。 如果我将IEnumerable类型从Tag更改为Int并使用以下查询一切正常: http:// localhost:51100 / odata / Tags / Default.GetTimeSeriesTest2(tags = @ x)?@ x = [4,5,6]
出了什么问题以及如何解决? 任何帮助都是受欢迎和赞赏的。
提前致谢
克劳斯·彼得
答案 0 :(得分:0)
您应编码Tag数据参数。 网址应为
http ://localhost:51100/odata/Tags/Default.GetTimeSeriesTest2(tags=@x)?@x=%7B%22value%22%3A%5B%7B%22%40odata.id%22%3A%22http%3A%2F%2Flocalhost%3A51100%2Fodata%2FTags('0')%22%7D%5D%7D
您可以在JS中使用encodeURIComponent
方法进行编码。