流利的验证允许空或带有结构的值

Posted

技术标签:

【中文标题】流利的验证允许空或带有结构的值【英文标题】:Fluent validation allow empty or value with structure 【发布时间】:2021-12-09 19:20:54 【问题描述】:

我有一个排序道具,它可以是空的,也可以是类似的值:

sort=""
sort=["name","desc"]
sort=["name","asc"]


RuleFor(r => r.Sort)
                .NotEmpty()
                .When(nr => nr.Contains("name"))
                .WithMessage("Invalid Sort");

如何允许空的,非空的with包含一个字符串?

【问题讨论】:

r.Sort 使用的是什么类型?是string吗?是IEnumerable<string>吗?有什么不同? 【参考方案1】:

您可以指定一个自定义规则。假设Sort 属于string[]

RuleFor(r => r.Sort)
    .NotNull()
    .Must(x => x.Length == 0 || (x.Length == 2 && x[0] == "name" && 
        (x[1] == "desc" || x[1] == "asc")))
    .WithMessage(...);

如果您需要重用此逻辑,只需使用自定义规则构建器as explained here。

【讨论】:

以上是关于流利的验证允许空或带有结构的值的主要内容,如果未能解决你的问题,请参考以下文章

评估空或空 JSTL c 标签

为啥允许使用泛型 lambda 而不允许使用带有模板化方法的嵌套结构?

带有身份验证的 Spring Boot 项目结构

流利的断言:Be() vs Equals()

Shell使用技巧

Azure 函数的流利验证