Ali*_*liK 6 c# .net-core asp.net-core asp.net-core-1.1
我试图覆盖RequiredAttribute
.net核心,似乎不适用于asp.net核心1.1
这是测试代码
public class CustomRequiredAttribute : RequiredAttribute
{
public CustomRequiredAttribute():base()
{
}
public override string FormatErrorMessage(string name)
{
return base.FormatErrorMessage(name);
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
return base.IsValid(value, validationContext);
}
}
Run Code Online (Sandbox Code Playgroud)
一旦在我的模型上使用,我期待正常的结果,就像field is required
我还没有定制它,只是调用基本方法.
这似乎没有按预期工作,只是绕过了客户端和服务器端的要求.
这样做的目的是将从db中提取的验证消息添加到ErrorMessage
属性中.
您的问题是ValidationAttributeAdapterProvider
,它是 的默认实现IValidationAttributeAdapterProvider
,仅检查特定类型。因此,使用自定义实现会导致丢失“适配器提供程序”,从而导致丢失数据属性。
解决方案:提供您自己的实现IValidationAttributeAdapterProvider
,它可以转发到非自定义内容的默认实现...
public class CustomValidationAttributeAdapterProvider : IValidationAttributeAdapterProvider
{
private IValidationAttributeAdapterProvider innerProvider = new ValidationAttributeAdapterProvider();
public IAttributeAdapter GetAttributeAdapter(ValidationAttribute attribute, IStringLocalizer stringLocalizer)
{
if (attribute == null)
throw new ArgumentNullException(nameof(attribute));
var type = attribute.GetType();
if (type == typeof(CustomRequiredAttribute))
return new RequiredAttributeAdapter((RequiredAttribute)attribute, stringLocalizer);
return innerProvider.GetAttributeAdapter(attribute, stringLocalizer);
}
}
Run Code Online (Sandbox Code Playgroud)
...并将其注册为单例。
services.AddSingleton<IValidationAttributeAdapterProvider, CustomValidationAttributeAdapterProvider>();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
889 次 |
最近记录: |