【问题标题】:OData function with parameter of type "Collection of Entities or Entity References"具有“实体集合或实体引用”类型参数的 OData 函数
【发布时间】: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


    【解决方案1】:

    您应该对标签数据参数进行编码。 网址应该是

    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方法进行编码。

    【讨论】:

    • 感谢您的回答。不幸的是,它对我不起作用。在 Internet Explorer 中,我收到 HTTP 404: NotFound 错误,使用 Fiddler 我收到 HTTP 502: DNS lookup failed 错误。
    猜你喜欢
    • 2010-10-09
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 2023-03-23
    • 2013-03-03
    • 1970-01-01
    相关资源
    最近更新 更多