📅  最后修改于: 2023-12-03 15:36:24.422000             🧑  作者: Mango
C# ValidationAttribute可以用于验证参数或属性是否符合要求,在开发中非常有用。主要有以下几种场景:
当开发一个方法时,如果需要验证参数是否正确,就可以使用ValidationAttributes进行验证。例如,我们需要验证一个人的年龄是否大于18岁:
public void Vote([Range(18, int.MaxValue)] int age)
{
// 只有年龄大于等于18岁时,才会执行投票动作
}
上面的代码中,我们使用了RangeAttribute来验证age参数是否在18岁及以上。如果age小于18岁,投票动作就不会执行。
在验证时,也可以使用其他的ValidationAttributes。例如,RegularExpressionAttribute可以用于验证字符串是否符合某个正则表达式的格式,如下所示:
public void VerifyEmail([RegularExpression(@"[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+", ErrorMessage = "邮箱格式不正确")] string email)
{
// 通过邮箱验证
}
上面的代码中,我们使用了RegularExpressionAttribute来验证email参数是否符合邮箱的格式。
在开发中,一个实体对象中可能有很多属性需要进行验证。如果每个属性都使用ValidationAttributes进行验证,就显得很麻烦。这时,可以考虑使用继承ValidationAttribute的自定义类来实现验证。例如,我们需要验证一个人的姓名和年龄:
public class Person
{
[Required(ErrorMessage = "姓名不能为空")]
[StringLength(10, MinimumLength = 2, ErrorMessage = "姓名应该在2~10个字符之间")]
public string Name { get; set; }
[Range(18, int.MaxValue, ErrorMessage = "年龄必须大于18岁")]
public int Age { get; set; }
}
上面的代码中,我们使用了RequiredAttribute和StringLengthAttribute来验证Name属性的值是否符合要求,使用RangeAttribute来验证Age属性的值是否在18岁及以上。
在验证属性或实体对象时,如果遇到错误,可以使用ValidationResult类来处理。例如,我们需要验证一个人的年龄:
public class Person
{
[Range(18, int.MaxValue, ErrorMessage = "年龄必须大于18岁")]
public int Age { get; set; }
}
public void VerifyAge(Person person)
{
var results = new List<ValidationResult>();
var context = new ValidationContext(person);
bool isValid = Validator.TryValidateObject(person, context, results, true);
if (!isValid)
{
foreach (var result in results)
{
Console.WriteLine(result.ErrorMessage);
}
}
}
上面的代码中,我们使用了Validator.TryValidateObject方法来验证person对象,在验证过程中,如果发现错误,就会添加到results中。最后,我们遍历results来输出错误信息。
C# ValidationAttribute 可以用于验证参数或属性是否符合要求,非常适合在实际开发中使用。我们可以使用ValidationAttributes来验证参数、属性和实体对象,并通过ValidationResult类处理验证过程中的错误。