【问题标题】:Why does my null model validate?为什么我的空模型验证?
【发布时间】:2013-08-16 13:57:09
【问题描述】:

我有一个模型:

public class Foo
{
    [Required]
    public string Bar1 { get; set; }

    public string Bar2 { get; set; }
}

我正在我的 ASP.NET MVC API 中验证:

public HttpResponseMessage Post(Foo foo)
{
    if (ModelState.IsValid)
    {
        // Valid
    }
    else
    {
        // Invalid
    }
}

如果我发送没有键/值对的 POST(使 myModel 为空),我标记的 ModelState 是有效的。为什么是这样?如果我只提供 Bar2 键,它会正确地将其标记为无效。

【问题讨论】:

  • } 在 Bar1 {get;set; 之后丢失
  • @Kuzgun 谢谢 - 只是将我的真实代码转录为示例时出错。
  • FooMyModel 应该是同一个类吗?
  • 应该是public HttpResponseMessage Post(Foo myModel)

标签: asp.net asp.net-mvc asp.net-mvc-5


【解决方案1】:

这是设计使然。如果您的模型为空,则不执行验证。另一方面,如果您的模型不为 null,但 Bar1 属性为 null 或空字符串,您将收到验证错误。

例如,您将收到以下有效负载的验证错误:

{ "Bar2": "Bazinga" }

或者用这个:

{ "Bar1": null, "Bar2": "Bazinga" }

或者用这个:

{ "Bar1": "", "Bar2": "Bazinga" }

【讨论】:

  • @MrJones 为什么会假设您正在保存模型或不允许使用空模型?
  • “不执行验证”是说 ModelState.IsValid 应该返回 true 吗?
  • 谢谢达林。输出适当的错误响应的最佳方式是什么?
猜你喜欢
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 2011-06-10
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
相关资源
最近更新 更多