Joc*_*ick 2 c# validation data-annotations asp.net-web-api
使用WebApi v2我已经构建了一个以对象为参数的东西.我正在使用IValidateableObject和dataannotations进行模型验证,我使用WebApi过滤器触发.
但是,一个对象包含所有需要验证的项目数组.我已经创建了一个自定义属性,以便使用像Asp.net Web Api嵌套模型验证这样做,但我无法进行验证.另外 - 我已经使用了ValidateAllProperties标志.
所以我构建了一个控制台应用程序来验证行为,似乎没有触发验证(或者我错误地调用了API).这是对我不起作用的东西:
namespace ConsoleApplication1 {using System; 使用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; }
}
Run Code Online (Sandbox Code Playgroud)
}
isValid始终返回true.我在这做错了什么?
编辑 - 也尝试像这里定义MetaData类:当我使用Validator.TryValidateObject时,验证不起作用
这TryValidateObject是一个红鲱鱼,问题实际上在于RangeAttribute.
问题是属性有2个重载(一个for int和one for double),在你的属性定义中你已经声明了int值,这意味着内部属性值被强制转换int为截断浮点 - 所以本质上1.1会被截断为1所以总是在范围内.
简单的修复,确保你的属性知道你要比较double的,而不是int如
[Range(0.0, 1.0)]
public decimal LowerDecimal { get; set; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6359 次 |
| 最近记录: |