C# 单FluentValidation规则失败时引发异常
使用FluentValidation,是否可以在单个规则失败时引发异常?例如,我想调用Validate()并让下面的第一条规则简单地进行验证,但第二条规则在false时抛出异常C# 单FluentValidation规则失败时引发异常,c#,.net,fluentvalidation,C#,.net,Fluentvalidation,使用FluentValidation,是否可以在单个规则失败时引发异常?例如,我想调用Validate()并让下面的第一条规则简单地进行验证,但第二条规则在false时抛出异常 RuleFor(x => x.Title) .NotEmpty() .WithMessage("Please add a title for the project"); RuleFor(x => x.UserId) .NotEmpty() .WithMessage("Use
RuleFor(x => x.Title)
.NotEmpty()
.WithMessage("Please add a title for the project");
RuleFor(x => x.UserId)
.NotEmpty()
.WithMessage("User not supplied");
我可能是想强迫FluentValidation做一些它不打算做的事情。我知道ValidateAndThrow()方法,但这将在任何失败时引发异常。是。试着做些类似的事情- 将FluentValidation和FluentValidation.TestHelper添加到指令中
private readonly IValidator<ItemViewModel> validator = new ItemValidator();
//Assumes your fluent validation is in ItemValidator and your view model is ItemViewModel
[Test]
public void Headline_ShouldNotBeEmpty()
{
validator.ShouldHaveValidationErrorFor(f => f.message, string.Empty);
}
private readonly IValidator validator=new ItemValidator();
//假设fluent验证在ItemValidator中,并且视图模型为ItemViewModel
[测试]
公共无效标题\u不应为空()
{
应保存ValidationErrorFor(f=>f.message,string.Empty);
}
通常情况下,最好验证所有属性,然后报告结果,尽管在某些情况下,继续验证没有意义(在我的情况下,是在请求中缺少“租户”标识符时)
只需将第二条规则更改为如下内容(使用Automapper 5.2,C#6进行测试):
- 如果调用
并且第一条规则失败,那么它将简单地列在结果的IValidator.Validate(…)
列表中Errors
- 如果第二条规则失败,调用
将引发Validate
,显然不会返回结果ArgumentException
- 如果调用
扩展方法,则如果第二条规则失败,它将简单地返回、抛出ValidateAndThrow
,或者如果另一条规则失败,则抛出ArgumentException
ValidationException
RuleFor(x => x.Title)
.NotEmpty()
.WithMessage("Please add a title for the project");
RuleFor(x => x.UserId)
.NotEmpty()
.OnAnyFailure(x =>
{
throw new ArgumentException(nameof(x.UserId));
});