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.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逻辑,忽略了包含'.'的任何模型状态键,但这只是潜在问题的解决方法.
| 归档时间: |
|
| 查看次数: |
3935 次 |
| 最近记录: |