gpt4 book ai didi

c# - 覆盖asp.net core 1.1中的现有数据注释属性

转载 作者:太空狗 更新时间:2023-10-29 21:53:04 29 4
gpt4 key购买 nike

我正在尝试覆盖 .net core 中的 RequiredAttribute 并且似乎在 asp.net core 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);
}

}

在我的模型上使用后,我期待正常的结果,例如需要字段,因为我还没有自定义它,只是调用基本方法。

这似乎没有按预期工作,只是绕过了客户端和服务器端的要求。

这样做的目的是将从数据库中提取的验证消息添加到 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);
}
}

...并将其注册为单例。

services.AddSingleton<IValidationAttributeAdapterProvider, CustomValidationAttributeAdapterProvider>();

关于c# - 覆盖asp.net core 1.1中的现有数据注释属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41295292/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com