gpt4 book ai didi

c# - Validator.TryValidateObject 不验证属性

转载 作者:行者123 更新时间:2023-11-30 19:26:48 25 4
gpt4 key购买 nike

我使用 WebApi v2 构建了一些将对象作为参数的东西。我将 IValidateableObject 和 dataannotations 用于我使用 WebApi 过滤器触发的模型验证。

但是,一个对象包含一组所有都需要验证的项目。我创建了一个自定义属性,以便使用 Asp.net Web Api nested model validation 之类的东西来执行此操作,但我无法进行验证。另外 - 我已经使用了 ValidateAllProperties 标志。

所以我构建了一个控制台应用程序来验证行为,但似乎没有触发验证(或者我错误地调用了 API)。这是对我不起作用的东西:

命名空间 ConsoleApplication1{ 使用系统; 使用 System.Collections.Generic; 使用 System.ComponentModel.DataAnnotations;

class Program
{
static void Main()
{
var s = new Boundary { LowerDecimal = 1.1m };
var isValid = Validator.TryValidateObject(s, new ValidationContext(s, null, null), new List<ValidationResult>(), true);
Console.WriteLine("Validation resulted in " + isValid);
Console.ReadLine();
}
}

public class Boundary
{
[Range(0,1)]
public decimal LowerDecimal { get; set; }
}

isValid 始终返回 true。我在这里做错了什么?

编辑 - 还尝试像这里一样定义 MetaData 类:Validation does not work when I use Validator.TryValidateObject

最佳答案

TryValidateObject 是一个转移注意力的问题,问题实际上在于 RangeAttribute

问题是该属性有 2 个重载(一个用于 int,一个用于 double),在您的属性定义中您声明了 int values 这意味着在内部属性值被转换为 int 这将截断 float - 所以本质上 1.1 将被截断为 1始终在范围内。

简单的修复,确保你的属性知道你想要比较double而不是int,即

[Range(0.0, 1.0)]
public decimal LowerDecimal { get; set; }

关于c# - Validator.TryValidateObject 不验证属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21111905/

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