当我首先使用数据库时,我通过ViewModel验证我的输入。但这是否足以进行验证,或者是否有一些不成文的规则来添加它,例如在控制器?
此外,属性验证最常见的是什么,让我们说密码?
[Required]
[StringLength(50)]
[MinLength(3)]
public string Password { get; set; }
这是一个很好的验证吗?
答案 0 :(得分:2)
属性验证非常适合它的功能。除了您提到的验证属性之外,您还拥有EmailAddress属性,该属性将给定属性验证为电子邮件地址。
[EmailAddress(ErrorMessage = "Invalid Email Address")]
然后,您可以使用RegularExpression验证属性来执行更复杂的自定义验证:
[RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$",
ErrorMessage = "Characters are not allowed.")]
对于条件验证等,您可以将该逻辑添加到控制器,并根据需要向ModelState添加错误。
示例:
if (MyProperty == "something" && MyOtherProperty != "something")
{
ModelState.AddModelError("", "MyOtherProperty needs to be something")
}
如果您不希望在控制器逻辑中使用此类样板验证代码,则可以编写自己的自定义验证属性。通过这样做,您几乎可以验证您能想到的任何内容。
互联网上有关于该主题的大量资源。
How to create a custom validation attribute?
仅举几例。
答案 1 :(得分:0)
不要忘记通过调用ModelState.IsValid来检查ModelState的有效性。除此之外,我可以想象你需要做一些额外的数据库验证检查。