[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;
}
我试图强制执行所有值在Web API的邮政请求中指定。在上面的值模型中,当省略NUM属性时:
{"Id": "abc", "Name":"John"}
它为指示其缺失的模型状态添加了错误。但是,当省略ID属性时:
{"Num" : 3, "Name" : "John"}
出乎意料的是,未添加模型状态错误,并且该模型被认为有效。
当我用JsonConvert.Deserialize
手动对模型进行启用时,它在两种情况下都会引发序列化异常,表明该属性丢失了。为什么当值(INT)不正确时,而当请求正文中缺少参考类型(String)时,它似乎会添加模型状态错误?我该如何在模型状态错误中包括在内?
注意:在ID属性上放置[Required]
属性是不够的。我想允许发布一个空字符串值,只要它包含在请求中。
尝试这个?
[DataMember]
[Newtonsoft.Json.JsonProperty(Required = Newtonsoft.Json.Required.AllowNull)]
public string Id { get; set; }