gpt4 book ai didi

c# - FluentValidation 何时不引发任何消息

转载 作者:太空狗 更新时间:2023-10-29 23:13:33 26 4
gpt4 key购买 nike

这段代码有问题:

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);

最佳答案

您的代码有两个问题:

正如我在评论中指出的那样,第一个问题是您无法真正与 DateTime.Now 进行比较。自从打电话DateTime.Now一段时间后(即使是非常短的时间)会给你一个不同的值。

第二个问题是您正在使用 When方法。 When方法用于指定首先运行验证的条件(例如,您可以指定仅当某些其他属性的值为 1 时才验证此属性),它不能用于指定验证规则.相反,您可以使用 Must像这样的方法:

RuleFor(field => field.TermEndDate)
.NotEmpty()
.Must(x => (DateTime.Now - x).Duration() > TimeSpan.FromMinutes(1))
.WithMessage("error...");

这里我用的是MustTermEndDate 的值(value)应该比我运行验证的时间(即我调用 DateTime.Now 的时间)多或少至少 1 分钟(距离 Validate 1 分钟)。

更新:

比较TermEndDateTermStartDate ,你可以这样做:

RuleFor(field => field.TermEndDate)
.Must((cmd, enddate) => enddate != cmd.TermStartDate)
.WithMessage("error...");

关于c# - FluentValidation 何时不引发任何消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34546304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com