[英]FluentValidation chaining rules in "AND" manner
創建了這個驗證:
public ActivityValidator(IUserAccessor userAccessor)
{
var userId = userAccessor.GetUserIdFromAccessToken();
RuleSet("CompleteHappeningAsync", () =>
{
RuleFor(a => a.ActivityTypeId).IsHappening()
.WithState(x => new BadRequest("Aktivnost nije Događaj"))
.DependentRules(() =>
{
RuleFor(a => a.EndDate).LessThanOrEqualTo(DateTimeOffset.Now)
.WithState(x => new BadRequest("Događaj se još nije završio"))
.DependentRules(() =>
{
RuleFor(a => a.EndDate).GreaterThan(DateTimeOffset.Now.AddDays(-7))
.WithState(x => new BadRequest("Prošlo je nedelju dana od završetka Događaja"))
.DependentRules(() =>
{
RuleFor(a => a.User.Id).Equal(userId)
.WithState(x => new BadRequest("Ne možete završiti tuđi događaj"))
.DependentRules(() =>
{
RuleFor(a => a.HappeningMedias).Empty()
.WithState(x => new BadRequest("Već ste završili događaj"));
});
});
});
});
});
}
如何使用When以推薦的方式重寫它?
CascadeMode 用於為一個屬性鏈接的規則,因此此處不能使用。
我找到了更好的方法,而不是使用When。 在 Startup.cs 中設置 cfg.ValidatorOptions.DefaultClassLevelCascadeMode = CascadeMode.Stop 然后你可以用“AND”的方式更好地編寫規則:
RuleFor(a => a.ActivityTypeId).IsHappening();
RuleFor(a => a.EndDate).LessThanOrEqualTo(DateTimeOffset.Now)
.WithState(e => new BadRequest("Događaj se još nije završio"));
RuleFor(a => a.EndDate).GreaterThan(DateTimeOffset.Now.AddDays(-7))
.WithState(e => new BadRequest("Prošlo je nedelju dana od završetka Događaja"));
RuleFor(a => a.User.Id).Equal(userId)
.WithState(e => new BadRequest("Ne možete završiti tuđi događaj"));
RuleFor(a => a.HappeningMedias).Empty()
.WithState(e => new BadRequest("Već ste završili događaj"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.