这是我的代码:
RuleFor(x => x.Content).NotEmpty().Must(content => content.Trim().Length > 0);
我希望它应该表现为
if (NotEmpty(x.Content) && x.Content.Trim().Length > 0)
声明,但它抛出NullReferenceException
if x.Content
is null
。
请帮助我解决方法。
这是我的代码:
RuleFor(x => x.Content).NotEmpty().Must(content => content.Trim().Length > 0);
我希望它应该表现为
if (NotEmpty(x.Content) && x.Content.Trim().Length > 0)
声明,但它抛出NullReferenceException
if x.Content
is null
。
请帮助我解决方法。
有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();
看来这段代码也很完美:
RuleFor(x => x.Content)
.Cascade(CascadeMode.StopOnFirstFailure)
.NotEmpty()
.Must(content => content.Trim().Length > 0);
您可以编写自定义规则。如果规则返回 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);
}
}