Json 绑定(bind)到对象时出现问题。 int 值未通过适当的属性进行验证。 我想验证超时值。 简化类:
public class SimpleObject
{
[Required]
public string Command { get; set; }
[Required]
public int TimeOut { get; set; }
[Required]
public string Type { get; set; }
}
简单的 Controller :
[HttpPost]
public ActionResult Edit(SimpleObject request)
{
var errors = ModelState.Values.Where(x => x.Errors.Count > 1);
return new EmptyResult();
}
我正在使用 fiddler 发送这个 Json
{"type":"Foo"}
乐趣现在开始, Controller 的 ModelState.Keys 显示如下:
Count = 2
[0]: "Type"
[1]: "Command"
TimeOut 的 ModelState 验证 key 在哪里?如果我尝试发送 Type 和 Command 并省略 TimeOut,它甚至会将 ModelState 设置为有效。 尝试使用 mvc 3 和 mvc 4
请您参考如下方法:
这里的问题是验证在序列化之后起作用。 json反序列化为对象,TimeOut为0。但是required属性只检查null,所以TimeOut没问题。
您可以将 TimeOut 设置为可空:
public int? Timeout { get; set; }
或使用 RangeAttribute:
[Range(1, 10000)]
public int Timeout { get; set; }
