这是我的代码:
RuleFor(x => x.Content).NotEmpty().Must(content => content.Trim().Length > 0);
我希望它应该表现为
if (NotEmpty(x.Content) && x.Content.Trim().Length > 0)
语句但如果NullReferenceException
为x.Content
则会引发null
。
请帮我解决一下。
答案 0 :(得分:2)
Unless
允许您根据条件执行规则。但是,您需要将规则拆分为两个:
RuleFor(x => x.Content).NotEmpty();
RuleFor(x => x.Content).Must(content => content.Trim().Length > 0).Unless(x => x == null);
或者你可以使用??
运算符,它更紧凑:
RuleFor(x => (x.Content ?? "").Trim()).NotEmpty();
答案 1 :(得分:2)
看起来这段代码也很完美:
RuleFor(x => x.Content)
.Cascade(CascadeMode.StopOnFirstFailure)
.NotEmpty()
.Must(content => content.Trim().Length > 0);
答案 2 :(得分:1)
你可以写一个custom rule。如果规则返回true,则创建ValidationFailure
。像这样:
public class ViewModelValidator : AbstractValidator<ViewModel>
{
public ViewModelValidator()
{
Custom(r => ContentIsEmpty(r) ? new ValidationFailure("Content", "Content must not be empty.") : null);
}
private static bool ContentIsEmpty(ViewModel viewModel)
{
return string.IsNullOrWhiteSpace(viewModel.Content);
}
}