【发布时间】:2022-02-07 20:34:58
【问题描述】:
我有一个类 TestClass,我想自定义验证消息而不是默认消息。
TestClass是控制器中的post模型,继承自ControllerBase。
这是我尝试过的:
TestClass.cs
public class TestClass
{
[TestAtrribute(1.00, 99.99)]
public double TestNumber { get; set; }
}
TestAttribute.cs
public class TestAttribute : ValidationAttribute
{
private double _min;
private double _max;
public TestAttribute(double min, double max)
{
_min = min;
_max = max;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var error = $"{value} is invalid, must be between {_min} and {_max}";
try
{
var convertNum = Convert.ToDouble(value);
if (convertNum < _min || convertNum > _max)
return new ValidationResult(errorMessage);
}
catch (Exception)
{
return new ValidationResult(error);
}
return ValidationResult.Success;
}
}
但是,当我发布字符串值时,我的自定义属性不起作用。 它返回默认消息:
无法将字符串转换为双精度:测试。路径'TestClass.TestNumber', 第 36 行,第 22 位。
我的期望是:
测试无效,必须在 1.00 和 99.99 之间
请告诉我如何解决它。
【问题讨论】:
-
当我进行调试时,它不会出现在我的 IsValid 方法中。我相信在它可以到达我的 IsValid 方法之前已经完成了一些验证。
标签: c# validation .net-core webapi