FluentValidation 何时不引发任何消息
FluentValidation when does not raises any message
我对这段代码有疑问:
RuleFor(field => field.TermEndDate)
.NotEmpty()
.When(x => x.TermEndDate == x.TermStartDate)
.WithMessage("error...");
我设置了 TermEndDate = DateTime.Now
但没有消息出现!
我的测试代码是:
var now = DateTime.Now;
var command = new AddTermCommand
{
SchoolId = Guid.NewGuid(),
TermStartDate = now,
TermEndDate = now
};
var cmd = command.Validate();
if (!cmd.IsValid)
Console.WriteLine(cmd.Errors.First().ErrorMessage);
您的规则永远不会触发,因为 TermEndDate
将 永远不会 等于 DateTime.Now
;您正在将过去的值与 Now
.
的移动值进行比较
尝试验证特定日期或仅验证日期:
RuleFor(field => field.TermEndDate)
.NotEmpty()
.When(x => x.TermEndDate.Date == DateTime.Today)
.WithMessage("error...");
您的代码有两个问题:
正如我在评论中指出的那样,第一个问题是您无法真正与 DateTime.Now
进行比较,因为在一段时间(甚至非常短)后调用 DateTime.Now
会给您一个不同的值。
第二个问题是您使用的是When
方法。 When
方法用于首先指定一个条件 运行 验证(例如,您可以指定您想要验证此 属性 仅当某些其他值属性 为 1),不能用于指定验证规则。相反,您可以像这样使用 Must
方法:
RuleFor(field => field.TermEndDate)
.NotEmpty()
.Must(x => (DateTime.Now - x).Duration() > TimeSpan.FromMinutes(1))
.WithMessage("error...");
这里我用Must
表示TermEndDate
的值应该至少比我的时间多或少1分钟(与DateTime.Now
相差1分钟) 运行 验证(这是我调用 Validate
时)。
更新:
比较TermEndDate
和TermStartDate
,你可以这样做:
RuleFor(field => field.TermEndDate)
.Must((cmd, enddate) => enddate != cmd.TermStartDate)
.WithMessage("error...");
我对这段代码有疑问:
RuleFor(field => field.TermEndDate)
.NotEmpty()
.When(x => x.TermEndDate == x.TermStartDate)
.WithMessage("error...");
我设置了 TermEndDate = DateTime.Now
但没有消息出现!
我的测试代码是:
var now = DateTime.Now;
var command = new AddTermCommand
{
SchoolId = Guid.NewGuid(),
TermStartDate = now,
TermEndDate = now
};
var cmd = command.Validate();
if (!cmd.IsValid)
Console.WriteLine(cmd.Errors.First().ErrorMessage);
您的规则永远不会触发,因为 TermEndDate
将 永远不会 等于 DateTime.Now
;您正在将过去的值与 Now
.
尝试验证特定日期或仅验证日期:
RuleFor(field => field.TermEndDate)
.NotEmpty()
.When(x => x.TermEndDate.Date == DateTime.Today)
.WithMessage("error...");
您的代码有两个问题:
正如我在评论中指出的那样,第一个问题是您无法真正与 DateTime.Now
进行比较,因为在一段时间(甚至非常短)后调用 DateTime.Now
会给您一个不同的值。
第二个问题是您使用的是When
方法。 When
方法用于首先指定一个条件 运行 验证(例如,您可以指定您想要验证此 属性 仅当某些其他值属性 为 1),不能用于指定验证规则。相反,您可以像这样使用 Must
方法:
RuleFor(field => field.TermEndDate)
.NotEmpty()
.Must(x => (DateTime.Now - x).Duration() > TimeSpan.FromMinutes(1))
.WithMessage("error...");
这里我用Must
表示TermEndDate
的值应该至少比我的时间多或少1分钟(与DateTime.Now
相差1分钟) 运行 验证(这是我调用 Validate
时)。
更新:
比较TermEndDate
和TermStartDate
,你可以这样做:
RuleFor(field => field.TermEndDate)
.Must((cmd, enddate) => enddate != cmd.TermStartDate)
.WithMessage("error...");