是否可以在Web API中定义可选参数或传入空值作为OData v4函数中的参数?OData v4 web api中的可选函数参数
鉴于此函数的定义:
ODataConventionModelBuilder builder
var config = builder.EntityType<model.MyType>()
.Collection
.Function("Myfunction")
.ReturnsCollectionFromEntitySet<model.MyType>("MyType");
config.Parameter<int>("Id");
config.Parameter<string>("SomeString");
与此控制器操作:
[HttpGet]
public System.Web.OData.PageResult<model.MyType> MyFunction(int id, string someString)
{
return ...;
}
我试图调用此函数以下方式:
odata/MyType/Namespace.MyFunction(Id=123,SomeString='lalal')
做工精细 odata/MyType/Namespace.MyFunction(Id=123)
给了我一个404 odata/MyType/Namespace.MyFunction(Id=123,SomeString='')
给了我一个400的错误'A值是必需的,但没有出现在请求中。 odata/MyType/Namespace.MyFunction(Id=123,SomeString=null)
成功,但将字符串值'Microsoft.OData.Core.ODataNullValue'发送到控制器操作中的SomeString-paramater。我希望得到一个正常的空值,而不是。
测试在版本:
- Microsoft.AspNet.OData V5.4.0
升级到Microsoft.AspNet.OData V5.5.0-β证明解决问题(部分)。
进一步挖掘证明ModelState对象是无效的。 modelstate对象抱怨说,在第三个(?)参数中使用'someString.String'键存在错误。错误是'需要一个值,但不存在于请求中。'
在欧阳凡提供的代码示例中,https://github.com/VikingsFan/SampleForOData/tree/master/ODataFunctionSample可以轻松地重现该问题。只需运行该示例并在'CustomersController'中检查ModelState继承的ModelState属性。
这似乎是在asp.net web api中的一个错误。我改变了我的ModelState逻辑以忽略任何包含'。'的模型状态键,但这只是解决底层问题的一种解决方法。
尝试了您的建议,但效果并不理想。请看我更新的问题。 – 2015-03-26 10:47:02
我在[github](https://github.com/VikingsFan/SampleForOData/tree/master/ODataFunctionSample)上传了我的示例,你可以看到SomeString =''和SomeString = null正在工作,而我的示例版本是V5.5 bate。 – 2015-03-27 04:13:00
将检查出 – 2015-03-27 05:52:58