You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何覆盖.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:40:21