如何覆盖.NET 6默认验证消息模板以批量移除末尾句号?
移除.NET 6验证消息末尾的句号
默认的.NET数据验证消息(如[Required]、[StringLength]等属性的提示)均以句号结尾,若要全局移除这些末尾句号,无需逐个属性设置自定义ErrorMessage,可通过以下方式实现:
实现步骤
1. 创建自定义验证属性适配器提供器
继承DefaultValidationAttributeAdapterProvider,重写方法处理默认消息:
public class NoPeriodValidationAttributeAdapterProvider : DefaultValidationAttributeAdapterProvider { public override IAttributeAdapter GetAttributeAdapter(ValidationAttribute attribute, IStringLocalizer stringLocalizer) { var adapter = base.GetAttributeAdapter(attribute, stringLocalizer); if (adapter != null && !string.IsNullOrEmpty(adapter.ErrorMessage)) { // 移除消息末尾的句号 adapter.ErrorMessage = adapter.ErrorMessage.TrimEnd('.'); } return adapter; } }
2. 注册自定义服务
根据项目的启动方式,将自定义提供器注册到DI容器:
若使用.NET 6+顶级语句(Program.cs)
builder.Services.AddControllersWithViews() .AddMvcOptions(options => { options.ModelMetadataDetailsProviders.Add(new NoPeriodValidationAttributeAdapterProvider()); });
若使用传统Startup.cs
在ConfigureServices方法中添加:
services.AddControllersWithViews() .AddMvcOptions(options => { options.ModelMetadataDetailsProviders.Add(new NoPeriodValidationAttributeAdapterProvider()); });
补充说明
- 此方案针对数据验证属性的默认消息(如
[Required]的提示),若需处理模型绑定相关的消息(如参数绑定失败提示),才需要配置ModelBindingMessageProvider,示例如下:
options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor( _ => "值不能为空");
内容的提问来源于stack exchange,提问作者George Feakes
相关产品推荐
相关产品推荐

