Post方法上的OData null参数

时间:2017-07-31 18:34:42

标签: asp.net-web-api odata

我有一个简单的ASP.NET WebApi ODataV4控制器 -

public class FooController : ODataController
{
    [HttpPost]
    public string Post([FromBody] Foo fooObj)
    {
        ...
    }
}

Foo模型如下所示,Foo在EDM模型中被定义为EntityType -

public class
{
    [Key]
    string id {get ; set;}

    string name {get; set;}
}

我为此模型生成了ODataClient,并尝试发布一个新的Foo对象 -

FooContext container = new FooContext(..);
Foo newFoo = new Foo() 
{
      name = "Simple foo"
}
container.AddToFoos(newFoo );

当我这样做时,' fooObj'在Post方法中为null。但是,当我设置“id”时,请求中的属性为非null值(即使是空字符串),它似乎工作正常 -

Foo newFoo = new Foo() 
{
      id = "",
      name = "Simple foo"
}

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

如果您查看$ metadata,则关键属性“ id”不可为空。在OData模型注册期间,您应该可以将其设置为可选。我有一个类似的问题,但我使用的是Microsoft.AspNetCore.OData v7.0.1。我不确定您使用的是哪个版本的OData,但是我的方式是在构建模型的过程中:

builder.EntityType<Foo>().Property(p => p.Id).IsOptional();