【问题标题】:Fluent validation custom check from App constants来自 App 常量的流利验证自定义检查
【发布时间】:2021-07-14 03:19:04
【问题描述】:

如何验证我的静态类中是否存在 Status?

public static class AppConstants
{
    public static class FormStatus
    {
        public static string NEW = "New";
        public static string COMPLETE = "Complete";
        public static string DELETED = "Deleted";
    }
}

验证器类

public SetStatusCommandValidator(IApplicationDbContext context)
{
    _context = context;

    RuleFor(v => v.Status)
        .NotNull()
        .NotEmpty().WithMessage("Status is required.")
        .Must(???).WithMessage("Status is not a valid.");
}

基本上,我如何验证状态值必须是 AppConstants.FormStatus 之一?

谢谢!

【问题讨论】:

  • 为什么不用 Enum 而不是静态类?

标签: c# fluentvalidation


【解决方案1】:

由于您没有使用 Enum(这将允许您使用 .IsEnumName()),我认为您需要创建一个自定义验证器函数:

private bool BeAValidStatus(string status) 
{
    return typeof(AppConstants.FormStatus)
        .GetFields(BindingFlags.Static | BindingFlags.Public)
        .Where(f => f.GetRawConstantValue() == status)
        .Any();
}

然后在规则中使用自定义函数:

RuleFor(v => v.Status)
        .NotNull()
        .NotEmpty().WithMessage("Status is required.")
        .Must(BeAValidStatus).WithMessage("Status is not a valid.");

【讨论】:

    【解决方案2】:

    您可以在Must 谓词中创建内联集合/数组并使用.Contains

    RuleFor(v => v.Status)
        .NotNull()
        .NotEmpty().WithMessage(...)
        .Must(v => new [] { AppConstants.FormStatus.NEW, AppConstants.FormStatus.COMPLETE, AppConstants.FormStatus.DELETED }.Contains(v)).WithMessage(...);
    

    或者,您可以向 FormStatus 添加另一个包含所有这些属性的属性:

    public static class AppConstants
    {
        public static class FormStatus
        {
            // Statuses here
    
            public static string[] ALL_STATUSES = new string[] { NEW, COMPLETE, DELETED };
        }
    }
    

    那么你的Must 谓词变成Must(v => AppConstants.FormStatus.ALL_STATUSES.Contains(v)).WithMessage(...);

    对不起,如果语法不完全正确并且不能立即编译,我是在手机上写的,无法仔细检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 2018-07-28
      • 1970-01-01
      • 2018-09-08
      • 2021-07-17
      相关资源
      最近更新 更多