【问题标题】:Set case insensitivity in custom validator在自定义验证器中设置不区分大小写
【发布时间】:2018-07-13 16:51:25
【问题描述】:

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

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

我的问题是...如何更改 Must(validOptions.Contains) 以便当值是字符串类型时,忽略大小写?

对于不使用列表的变体,我可以轻松地执行此操作,但无法弄清楚此处使用的逻辑。

我知道我需要使用StringComparer.IgnoreOrdinalCaseStringComparison.IgnoreOrdinalCase,具体取决于。

【问题讨论】:

  • 该方法的完整签名是什么?
  • @Xiaoy312 很抱歉,但我不明白你所说的“签名”是什么意思
  • 是你粘贴的第一行代码;不完整。
  • @Xiaoy312 该代码中唯一省略的是将validOptions 列表设置为错误消息字符串的行。否则,那是/是完整的代码。

标签: c# fluentvalidation ignore-case


【解决方案1】:

你可以尝试检查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;
}   

【讨论】:

  • 没问题 :) 乐于助人
【解决方案2】:

您可以创建该通用方法的专用版本,然后调用它:

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

public static IRuleBuilderOptions<T, string> IsOfValue<T>(this IRuleBuilder<T, string> rule, params string[] validOptions) => rule.IsOfValue(StringComparer.OrdinalIgnoreCase, validOptions);
public static IRuleBuilderOptions<T, string> IsOfValue<T>(this IRuleBuilder<T, string> rule, StringComparer comparer, params string[] validOptions)
{
    return rule
        .Must(x => validOptions.Contains(x, comparer))
        .WithMessage("Custom Error");
}

【讨论】:

    猜你喜欢
    • 2020-08-02
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    相关资源
    最近更新 更多