FluentValidation调用RuleSet和CommonRules我有如下类);RuleFor(x=>x.CreatedByUserId).NotEmpty();RuleFor(x=>x.ProjectManagerId).NotEmpty();RuleFor(x=>x.ProjectName).NotEmpty();RuleFor(x=>x.SalesRepId).NotEmpty();RuleFor(x=>x.DeliveryDate).NotEmpty();RuleFor(x=>x.ProjectStatusId).NotEmpty();RuleFor(x=>x.DeptartmentId).NotEmpty();RuleFor(x=>x.CustomerId).NotEmpty();RuleSet("Insert",()=>{RuleFor(x=>x.ProjectLines).Must(ValidateProjectLines).SetCollectionValidator(newValidProjectLine());});RuleSet("更新",()=>{RuleFor(x=>x.ProjectLines).SetCollectionValidator(newValidProjectLine());});我想做的是用rulset调用验证,但我也想使用RuleSet调用验证时返回“通常”的规则。我调用验证的代码如下publicabstractclassBaseValidator{privateList_errors;公共布尔IsValid{得到;保护集;}公共列表错误{get{return_errors;}保护集{_errors=值;}}publicvirtualboolCallValidation(){Errors=newList();ValidatorAttributeval=this.GetType().GetCustomAttributes(typeof(ValidatorAttribute),true)[0]asValidatorAttribute;IValidator验证器=Activator.CreateInstance(val.ValidatorType)作为IValidator;FluentValidation.Results.ValidationResultresult=validator.Validate(this);IsValid=结果.IsValid;错误=result.Errors.ToList();返回结果.IsValid;}publicvirtualboolCallValidation(stringruleSet){Errors=newList();ValidatorAttributeval=this.GetType().GetCustomAttributes(typeof(ValidatorAttribute),true)[0]asValidatorAttribute;IValidator验证器=Activator.CreateInstance(val.ValidatorType)作为IValidator;FluentValidation.Results.ValidationResult结果=validator.Validate(newFluentValidation.ValidationContext(this,newPropertyChain(),newRulesetValidatorSelector(ruleSet)));IsValid=结果.IsValid;错误=result.Errors.ToList();返回结果.IsValid;}publicBaseValidator(){错误=newList();我可以使用成员规则集调用方法CallValidation,但它也不会调用“通用”规则我知道我可以创建一个“通用”规则集来运行这些规则,但在这种情况下,我必须始终调用验证通用规则集。有什么方法可以调用RuleSet并调用通用规则。相反,您可以这样做:使用FluentValidation;...FluentValidation.Results.ValidationResultresultCommon=validator.Validate(parameter,ruleSet:"default,Insert");using指令需要将Validate()扩展方法从DefaultValidatorExtensions带入具有ruleSet属性的规则集。否则只能使用inheritanceAbstractValidator的Validate()方法,没有ruleSet参数。在Validator类中创建一个方法,其中包含需要始终应用的所有“常规”规则。现在您可以调用此方法示例publicclassMyEntityValidator:AbstractValidator{publicMyEntityValidator(){RuleSet("Create",()=>{RuleFor(x=>x.Email).EmailAddress();ExecuteCommonRules();});执行通用规则();}//////应始终应用的规则///privatevoidExecuteCommonRules(){RuleFor(x=>x.Name).NotEmpty();RuleFor(x=>x.City).NotEmpty();您可以在控制器中为您的操作定义规则集[HttpPost]publicActionResultCreate([CustomizeValidator(RuleSet="Create")]MyEntitymodel)这将确保对操作创建的请求将使用RuleSetCreate进行验证。所有其他操作都将调用控制器中的ExecuteCommonRules。我找到了一种实现方式,就是在CallValidation(stringruleSet)方法中添加第二个validator.Validate如下是用到的,需要多了解C#学习教程,希望大家多多关注——publicvirtualboolCallValidation(stringruleSet){错误=newList();ValidatorAttributeval=this.GetType().GetCustomAttributes(typeof(ValidatorAttribute),true)[0]asValidatorAttribute;IValidator验证器=Activator.CreateInstance(val.ValidatorType)作为IValidator;FluentValidation.Results.ValidationResultresult=validator.Validate(newFluentValidation.ValidationContext(this,newPropertyChain(),newRulesetValidatorSelector(ruleSet)));FluentValidation.Results.ValidationResultresultCommon=validator.Validate(this);IsValid=(result.IsValid&&resultCommon.IsValid);错误=result.Errors.Union(resultCommon.Errors).ToList();返回有效;整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
