gpt4 book ai didi

c# - 如何使用 DataAnnotation 属性在控制台应用程序中验证模型

转载 作者:行者123 更新时间:2023-12-04 16:41:34 26 4
gpt4 key购买 nike

我正在尝试在 ASP.net MVC 应用程序之外使用 DataAnnotation 属性验证。理想情况下,我想在我的控制台应用程序中使用任何模型类并将其装饰如下:

private class MyExample
{
[Required]
public string RequiredFieldTest { get; set; }

[StringLength(100)]
public int StringLengthFieldTest { get; set; }

[Range(1, 100)]
public int RangeFieldTest { get; set; }

[DataType(DataType.Text)]
public object DataTypeFieldTest { get; set; }

[MaxLength(10)]
public string MaxLengthFieldTest { get; set; }
}

然后(伪)做这样的事情:

var item = new MyExample(); // not setting any properties, should fail validation
var isValid = item.Validate();

我在网上的示例中找到了这段代码:

var item = new MyExample(); // not setting any properties, should fail validation

var context = new ValidationContext(item, serviceProvider: null, items: null);
var errorResults = new List<ValidationResult>();

// carry out validation.
var isValid = Validator.TryValidateObject(item, context, errorResults);

// isValid will be FALSE

这给了我“isValid = false”,但它似乎只支持 Required 字段而忽略其他字段。

当我期望它返回 false 时,以下代码返回 isValid = true:

var item = new MyExample() {
RequiredFieldTest = "example text"
};

var context = new ValidationContext(item, serviceProvider: null, items: null);
var errorResults = new List<ValidationResult>();

// carry out validation.
var isValid = Validator.TryValidateObject(item, context, errorResults);

// isValid will be TRUE - not expected behavior

使用属性(字符串长度、范围、最大长度、数据类型等)的所有其他验证尝试均通过有效。

有没有人以前见过这种行为或知道为什么会这样?

最佳答案

TryValidateObject 默认只验证 required 属性。您可以向它传递第四个参数 validateAllProperties = true,以验证其他属性。

if (!Validator.TryValidateObject(item, context, errorResults, true)) {
//invalid
}

关于c# - 如何使用 DataAnnotation 属性在控制台应用程序中验证模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59753372/

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