使用FluentValidation检查字符串是否为大于零的数字

6
我已经开始在一个WPF项目中使用FluentValidation,到目前为止,我只是简单地使用它来检查字段是否已填写或少于n个字符。
现在我需要检查插入的值(这是一个字符串...该死的旧代码)是否大于0。是否有一种简单的方法可以转换它?
RuleFor(x=>x.MyStringField).Somehow().GreaterThen(0) ?

感谢您的提前参与。
3个回答

11

另一种解决方案:

RuleFor(a => a.MyStringField).Must(x => int.TryParse(x, out var val) && val > 0)
.WithMessage("Invalid Number.");

1
"Must" 真的帮了我很多,我之前一直在使用旧版本的 Transform 扩展方法,但这个新方法非常简洁高效。 - Zahari Kitanov

11

只需像这样编写自定义验证器

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");

更新 11/8/21

如果您要在大型项目或API中使用此功能,建议从启动中执行此操作,这样我们就不需要在每个方法中手动调用validator.Validate()

services.AddMvc(options => options.EnableEndpointRouting = false)
                .AddFluentValidation(fv =>
                {
    fv.RegisterValidatorsFromAssemblyContaining<BaseValidator>();
                    fv.ImplicitlyValidateChildProperties = true;
                    fv.ValidatorOptions.CascadeMode = CascadeMode.Stop;
                })

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接