OData v4 web api中的可选函数参数

And*_*mer 1 .net odata asp.net-web-api

是否可以定义可选参数,或者将空值作为参数传递到Web API中的OData v4函数中?

鉴于此函数定义:

ODataConventionModelBuilder builder
var config = builder.EntityType<model.MyType>()
    .Collection
    .Function("Myfunction")
    .ReturnsCollectionFromEntitySet<model.MyType>("MyType");
config.Parameter<int>("Id");
config.Parameter<string>("SomeString");
Run Code Online (Sandbox Code Playgroud)

和这个控制器动作:

[HttpGet]
public System.Web.OData.PageResult<model.MyType> MyFunction(int id, string someString)
{
    return ...;
}
Run Code Online (Sandbox Code Playgroud)

我试过用这些方法调用这个函数:

odata/MyType/Namespace.MyFunction(Id=123,SomeString='lalal')工作正常 odata/MyType/Namespace.MyFunction(Id=123)给我一个404 odata/MyType/Namespace.MyFunction(Id=123,SomeString='')给我一个400错误'一个值是必需的,但在请求中不存在. 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-beta证明可以解决这个问题(部分).


进一步挖掘证明了ModelState对象无效.modelstate对象抱怨第三个(?)参数中存在错误,其中键为'someString.String'.错误是"值是必需的,但请求中不存在."

Fan Ouyang在https://github.com/VikingsFan/SampleForOData/tree/master/ODataFunctionSample提供的代码示例中可以轻松地重现该问题.只需运行示例并检查'CustomersController'中的ModelState继承的ModelState属性.

这似乎是asp.net web api中的一个错误.我更改了我的ModelState逻辑,忽略了包含'.'的任何模型状态键,但这只是潜在问题的解决方法.

Fan*_*ang 6

是:

odata/MyType/Namespace.MyFunction(Id = 123,SomeString ='')或odata/MyType/Namespace.MyFunction(Id = 123,SomeString = null)应该有效

这是一个问题,我认为它已在V5.5中得到修复,将于本月底发布,如果此问题仍然有效,您可以在nuget中尝试我们的最后一个代码和github master分支或V5.5 beta.请为我们打开一个问题,谢谢!

我们的github页面中有很多样本

希望这可以帮助:)