How to pass Array to OData function in ASP.NET Web API implementation?(如何在ASP.NET Web API实现中将Array传递给OData函数?)
问题描述
OData V4规范规定必须能够: https://issues.oasis-open.org/browse/ODATA-636。"复杂类型和数组只能通过 参数别名"
当我尝试传递具有OData参数别名的数组时,发生异常。
/TestEntities/NS.TestFunction(ArrayHere=@p)?@p=[1,2,3]
结果为:
无法将类型为"EdmValidCoreModelPrimitiveType"的对象强制转换为类型 ‘Microsoft.OData.Edm.IEdm结构类型
有趣的是,元数据文档针对这样的情况进行了正确的组合:
是否可以使用ASP.NET MVC Web API%2 OData将数组传递给查询字符串中的OData函数?
更新:
以下是构建EDM模型和控制器的代码。
控制器:
用[FromODataUri]
标记参数不能解决问题。
更新2:
以下是堆栈跟踪:
推荐答案
假设您使用的是OData V4,则在注册函数时需要使用CollectionParameter
,并且在arrayHere参数上缺少[FromODataUri]
。此外,请尝试使用IEnumerable<int>
而不是数组。
使用控制器中的函数如下.
现在您可以提出如下请求.
http://yourRestService/API/TestEntities/NS.TestFunction(ArrayHere=[1,2,3])
和
http://yourRestService/API/TestEntities/NS.TestFunction2(ArrayHere=@ArrayData)?@ArrayData=%5B%7B%22FirstName%22%3A%22Bob%22%2C+%22LastName%22%3A%22Dole%22%7D%2C%7B%22FirstName%22%3A%22Bill%22%2C+%22LastName%22%3A%22Clinton%22%7D%5D
这篇关于如何在ASP.NET Web API实现中将Array传递给OData函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!