c# - 在自定义验证器中设置不区分大小写
问题描述
我正在使用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
依赖。
解决方案
你可以尝试检查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;
}
推荐阅读
- java - 在 .xml 文件的顶部写注释?
- typescript - 递归简单对象的 TypeScript 类型?
- mysql - MariaDB SELECT 使用了索引,但看起来像表扫描
- angular - Angular firestore - 在查询集合中的数组后从同一属性字段获取所有数据
- javascript - 单元测试没有任何意义
- javascript - 在谷歌脚本的电子表格中获取所选下拉列表的值
- zap - 提取在 Jenkins 代理上的容器中运行的 ZAP 报告(基于 docker)
- vue.js - 使用 vue 和 axios 从 API 数据中获取每个对象
- javascript - 只执行一次“onscroll”功能
- reactjs - 扩展 React.Component 与扩展组件