【问题标题】:WebAPI2 Json.Net Required property not adding ModelState Error properlyWebAPI2 Json.Net 所需属性未正确添加 ModelState 错误
【发布时间】:2015-07-25 12:10:49
【问题描述】:
[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 的发布请求中指定所有值。在上面的 Value 模型中,当 Num 属性被省略时:

 {"Id": "abc", "Name":"John"}

它向模型状态添加一个错误,表明它不存在。但是,当省略 Id 属性时:

 {"Num" : 3, "Name" : "John"}

没想到,没有添加模型状态错误,模型被认为是有效的。

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

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

【问题讨论】:

    标签: c# asp.net asp.net-web-api json.net


    【解决方案1】:

    试试这个?

    [DataMember]
    [Newtonsoft.Json.JsonProperty(Required = Newtonsoft.Json.Required.AllowNull)]
    public string Id { get; set; }
    

    【讨论】:

      猜你喜欢
      • 2017-11-02
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多