首页 > 解决方案 > 在自定义验证器中设置不区分大小写

问题描述

我正在使用Fluent Validation其中编写自定义验证,以检查属性的当前值是否包含任何值列表,如下所示:

IRuleBuilderOptions<T, TProperty> IsOfValue<T, TProperty> rule, params TProperty[] validOptions)
{
   return rule
     .Must(validOptions.Contains)
     .WithMessage("Custom Error")
}

我的问题是......我怎样才能改变,Must(validOptions.Contains)以便当值是字符串类型时,忽略大小写?

对于不使用列表的变体,我可以轻松地做到这一点,但无法弄清楚要在此处使用的逻辑。

我知道我需要使用StringComparer.IgnoreOrdinalCase或者StringComparison.IgnoreOrdinalCase依赖。

标签: c#fluentvalidationignore-case

解决方案


你可以尝试检查TProperty类型,如果是string你可以使用

string.Contains(x.ToString(),StringComparer.OrdinalIgnoreCase)

否则使用您的默认值。

IRuleBuilderOptions<T, TProperty> IsOfValue<T, TProperty>(this IRuleBuilder<T, TProperty> rule, params TProperty[] validOptions)
{
    IRuleBuilderOptions<T, TProperty> result = rule
                 .Must(validOptions.Contains)
                 .WithMessage("Custom Error");

   if(typeof(TProperty) == typeof(string)){
       string[] vailds = validOptions as string[];
       result = rule
                .Must(x => vailds.Contains(x.ToString(),StringComparer.OrdinalIgnoreCase))
                .WithMessage("Custom Error");

   }

   return result;
}   

推荐阅读