C# WebAPI2 Json.Net必需属性未正确添加ModelState错误

C# WebAPI2 Json.Net必需属性未正确添加ModelState错误,c#,asp.net,asp.net-web-api,json.net,C#,Asp.net,Asp.net Web Api,Json.net,我试图强制所有值都在对web api的post请求中指定。在上面的值模型中,当省略Num属性时: [DataContract(Namespace="")] public class Value { [DataMember(IsRequired=true)] public string Id { get; set; } [DataMember(IsRequired=true)] public int Num { get; set; } [DataMemb

我试图强制所有值都在对web api的post请求中指定。在上面的值模型中,当省略Num属性时:

[DataContract(Namespace="")]
public class Value
{
    [DataMember(IsRequired=true)]
    public string Id { get; set; }

    [DataMember(IsRequired=true)]
    public int Num { get; set; }

    [DataMember]
    public string Name { get; set; }
}        

public Value Post(Value value)
{
    if(!ModelState.IsValid)
    {
        //Bad request
    }
    return value;
}
它会向模型状态添加一个错误,指示其不存在。但是,当省略Id属性时:

 {"Id": "abc", "Name":"John"}
意外地,没有添加模型状态错误,并且该模型被认为是有效的

当我使用
JsonConvert.Deserialize
手动反序列化模型时,在这两种情况下都会抛出一个序列化异常,表明缺少该属性。当值类型(int)不正确时,为什么会添加模型状态错误,而当请求正文中缺少引用类型(字符串)时却不会?如何在模型状态错误中包含这些错误

注意:仅在Id属性上放置
[Required]
属性是不够的。只要请求中包含null或空字符串值,我就允许发布该值。

是否尝试此操作

 {"Num" : 3, "Name" : "John"}
[DataMember]
[Newtonsoft.Json.JsonProperty(Required = Newtonsoft.Json.Required.AllowNull)]
public string Id { get; set; }