gpt4 book ai didi

validation - 手动使用数据注释验证和对象图

转载 作者:行者123 更新时间:2023-12-02 04:07:17 25 4
gpt4 key购买 nike

假设我有两个简单的类:

public class CustomerDetails
{
[Required]
public string Address
{
get;
set;
}
}

public class Customer
{
public Customer()
{
Details = new CustomerDetails();
}

[Required]
public string Name
{
get;
set;
}
public CustomerDetails Details
{
get;
private set;
}
}

当我尝试通过这种方式在控制台应用程序中手动验证Customer类时:
var customer = new Customer() { Name = "Conrad" };
var context = new ValidationContext(customer, null, null);
var results = new List<ValidationResult>();
Validator.TryValidateObject(customer, context, true);

然后,即使我选择验证客户实例的所有属性,验证器也仅验证客户实例的Name属性,而不验证Details的Address属性。

这是设计使然还是我在这里缺少什么?而且,如果这是设计使然,那么是否存在一种健壮的方法来手动验证装饰有验证属性(包括嵌套类型)的完整对象图,而不是手动对整个对象图使用验证器?

请注意,这是在控制台应用程序而不是ASP.NET MVC应用程序中测试的。

亲切的问候。

最佳答案

我有几乎相同的问题,但是有嵌套对象的集合。我能够通过在容器类上实现IValidatableObject来解决它。就您而言,这稍微容易些。像这样:

public class Customer : IValidatableObject
{
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var context = new ValidationContext(this.Details, validationContext.ServiceContainer, validationContext.Items);
var results = new List<ValidationResult>();
Validator.TryValidateObject(this.Details, context, results);
return results;
}
}

希望这可以帮助。

关于validation - 手动使用数据注释验证和对象图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6938877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com