如何解决跨不同ValidationAttribute的C#共享ValidationContext失败
如果第一个验证属性(即“ ValidatorAttributeOne”)的验证结果为true,则无需处理“ ValidatorAttributeTwo”验证逻辑。
要获得分配给“ validationContext.Items”字典的“ ValidationAttributeOne”的有效结果,则认为“ validationContext”将在同一http请求中的不同“ ValidationAttributes”之间共享,但下面的行始终抛出异常
var isDependedFilterValidated = (bool?)validationContext.Items[dependedFilter]
“ message”:“字典中不存在给定键'ValidationAttributeOne'。”,
public class ValidatorAttributeOne : ValidationAttribute
{
protected override ValidationResult IsValid(object value,ValidationContext validationContext)
{
//custom validation
validationContext.Items["ValidatorAttributeOne"] = true;
return ValidationResult.Success;
}
}
public class ValidatorAttributeTwo : ValidationAttribute
{
private readonly string dependedFilter = default(string);
public UsernamesEmailValidatorAttribute()
{
}
public UsernamesEmailValidatorAttribute(string filter)
{
dependedFilter = filter;
}
protected override ValidationResult IsValid(object value,ValidationContext validationContext)
{
var isDependedFilterValidated = (bool?)validationContext.Items[dependedFilter];
if (isDependedFilterValidated == false)
{
//custom validation logic
}
return ValidationResult.Success;
}
}
public class CustomeModel
{
[ValidatorAttributeOne ]
[ValidatorAttributeTwo("ValidatorAttributeOne")]
public string usernames { get; set; }
}
解决方法
首先,如果您不想在第一个为true时执行validationContext
,则两个自定义验证属性不能共享validateContext。您可以将两个validateAttributes的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");
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。