使用属性进行验证
本文关键字:验证 属性 | 更新日期: 2023-09-27 18:12:33
我们有一个简单的类:
public class User
{
[Required(AllowEmptyStrings = false, ErrorMessage="EmailIsRequired"]
public string EmailAddress { get; set; }
}
我知道如何使用Validator。TryValidateProperty和Validator。System.ComponentModel.DataAnnotations命名空间中的TryValidateObject。为了使其工作,您需要想要验证的对象的实际实例。
但是现在,我想在没有User类实例的情况下验证某个值,例如:
TryValidateValue(typeof(User), "EmailAddress", "test@test.com");
目标是我想在实际实例化对象本身之前测试一个值(原因是我只允许创建有效的域实体)。所以实际上我想在类而不是实例上使用验证属性。
你知道怎么做吗?
谢谢!
编辑:与此同时,我决定不使用数据注释,而是使用http://fluentvalidation.codeplex.com,以便验证被移动到实体之外。通过这种方式,可以从实体和命令处理程序内部触发验证。由于使用了流畅的符号,验证本身看起来也更可读。
下面是一个如何使用TryValidateValue方法的示例:
public class User
{
[Required(AllowEmptyStrings = false, ErrorMessage = "EmailIsRequired")]
public string EmailAddress { get; set; }
}
class Program
{
static void Main()
{
var value = "test@test.com";
var context = new ValidationContext(value, null, null);
var results = new List<ValidationResult>();
var attributes = typeof(User)
.GetProperty("EmailAddress")
.GetCustomAttributes(false)
.OfType<ValidationAttribute>()
.ToArray();
if (!Validator.TryValidateValue(value, context, results, attributes))
{
foreach (var result in results)
{
Console.WriteLine(result.ErrorMessage);
}
}
else
{
Console.WriteLine("{0} is valid", value);
}
}
}