我开始在 WPF 项目上使用
FluentValidation
,到目前为止,我以一种简单的方式使用它来检查字段是否已填充或少于 n 个字符。
现在我必须检查插入的值(这是一个字符串...该死的旧代码)是否大于 0。有没有一种简单的方法可以使用
进行转换RuleFor(x=>x.MyStringField).Somehow().GreaterThen(0) ?
提前致谢
只需编写一个像这样的自定义验证器
public class Validator : AbstractValidator<Test>
{
public Validator()
{
RuleFor(x => x.MyString)
.Custom((x, context) =>
{
if ((!(int.TryParse(x, out int value)) || value < 0))
{
context.AddFailure($"{x} is not a valid number or less than 0");
}
});
}
}
从您需要验证的地方执行此操作
var validator = new Validator();
var result = validator.Validate(test);
Console.WriteLine(result.IsValid ? $"Entered value is a number and is > 0" : "Fail");
如果您要在大型项目或 API 上使用此功能,则最好从
Startup
执行此操作,我们不需要在每个方法中手动调用 validator.Validate()
。
services.AddMvc(options => options.EnableEndpointRouting = false)
.AddFluentValidation(fv =>
{
fv.RegisterValidatorsFromAssemblyContaining<BaseValidator>();
fv.ImplicitlyValidateChildProperties = true;
fv.ValidatorOptions.CascadeMode = CascadeMode.Stop;
})
另一种解决方案:
RuleFor(a => a.MyStringField).Must(x => int.TryParse(x, out var val) && val > 0)
.WithMessage("Invalid Number.");
您可以使用转换:https://docs.fluidation.net/en/latest/transform.html
Transform(from: x => x.SomeStringProperty, to: value => int.TryParse(value, out int val) ? (int?) val : null)
.GreaterThan(0);