C#跨不同ValidationAttribute共享ValidationContext失败
希望使用一系列自定义验证属性对输入模型应用验证,如下所述 如果第一个验证属性即“ValidatorAttributeOne”的验证结果为真,则无需处理“ValidatorAttributeTo”验证逻辑 为了实现分配给“validationContext.Items”的“ValidationAttributeOne”的有效结果,字典认为“validationContext”将在同一http请求中的不同“ValidationAttributes”之间共享,但行下总是抛出下面的异常C#跨不同ValidationAttribute共享ValidationContext失败,c#,asp.net-core-webapi,model-validation,validationattribute,C#,Asp.net Core Webapi,Model Validation,Validationattribute,希望使用一系列自定义验证属性对输入模型应用验证,如下所述 如果第一个验证属性即“ValidatorAttributeOne”的验证结果为真,则无需处理“ValidatorAttributeTo”验证逻辑 为了实现分配给“validationContext.Items”的“ValidationAttributeOne”的有效结果,字典认为“validationContext”将在同一http请求中的不同“ValidationAttributes”之间共享,但行下总是抛出下面的异常 var isDe
var isDependedFilterValidated = (bool?)validationContext.Items[dependedFilter]
“消息”:“字典中不存在给定的键‘ValidationAttributeOne’。”
首先,如果在第一个验证属性为true时不想执行
validationContext
,则两个自定义验证属性不能共享validationContext。您可以将两个validationAttributes的IsValid方法的内容一起设置
例如:
public class ValidationAttributeThree : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (ValidationAttributeOne IsValid method Content is true) {
return ValidationResult.Success;
}
else if(ValidationAttributeTwo IsValid method Content is true){
return new ValidationResult("ValidationAttributeOne error message");
}else{
return new ValidationResult("ValidationAttributeOne error message"+"ValidationAttributeTwo error message");
}
}
}
public class ValidationAttributeThree : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (ValidationAttributeOne IsValid method Content is true) {
return ValidationResult.Success;
}
else if(ValidationAttributeTwo IsValid method Content is true){
return new ValidationResult("ValidationAttributeOne error message");
}else{
return new ValidationResult("ValidationAttributeOne error message"+"ValidationAttributeTwo error message");
}
}
}