定制本地化的默认验证错误消息
.net core 模型验证的本地化
创建一个类
现在建立一个类,添加字段限制说明。
public class ChatMessage { [Required] [DisplayName("用户名")] [MinLength(10)] public string UserName { get; set; } [DisplayName("内容")] [MaxLength(50)] [MinLength(10)] public string Content { get; set; } [Required] [DisplayName("发送时间")] public DateTime SendedTime { get; set; } [DisplayName("客户端名称")] [EmailAddress] [Phone] public string ClientName { get; set; } //[DisplayName("编码")] [Range(10, 50)] public int Code { get; set; } }
初始环境效果
现在想要将默认的错误提示语句改为中文提示。
当然如果每个都写ErrorMessage话,错误提示也会直接读取ErrorMessage中编辑的内容,但是比较累。
第一步添加资源文件
第二步添加自己的验证信息
public class CustomValidationMetadataProvider : IValidationMetadataProvider { private ResourceManager resourceManager; private Type resourceType; public CustomValidationMetadataProvider(string baseName, Type type) { resourceType = type; resourceManager = new ResourceManager(baseName, type.GetTypeInfo().Assembly); } public void CreateValidationMetadata( ValidationMetadataProviderContext context) { if (context.Key.ModelType.GetTypeInfo().IsValueType && context.ValidationMetadata.ValidatorMetadata .Where(m => m.GetType() == typeof(RequiredAttribute)).Count() == 0) context.ValidationMetadata.ValidatorMetadata. Add(new RequiredAttribute()); foreach (var attribute in context.ValidationMetadata.ValidatorMetadata) { ValidationAttribute tAttr = attribute as ValidationAttribute; if (tAttr != null/* && tAttr.ErrorMessage == null*/&& tAttr.ErrorMessageResourceName == null) { var name = tAttr.GetType().Name; if (resourceManager.GetString(name) != null) { tAttr.ErrorMessageResourceType = resourceType; tAttr.ErrorMessageResourceName = name; tAttr.ErrorMessage = null; } } } } }
第三步Startup中配置
services.AddControllers(options => { options.ModelMetadataDetailsProviders.Add(new CustomValidationMetadataProvider("UtilPack.SiteResources", typeof(SiteResources))); });
结果展示
备注说明
关于 tAttr.ErrorMessage == null 这一句的问题。
PhoneAttribute和EmailAddressAttribute等的ErrorMessage不是null 。它的值和ErrorMessageString 相同。
MinLengthAttribute,MaxLengthAttribute,RangeAttribute 和RequiredAttribute 的 ErrorMessage是null 和ErrorMessageString 不同
参考资料
https://docs.microsoft.com/zh-cn/archive/blogs/mvpawardprogram/aspnetcore-mvc-error-message
标签:
dotnet core
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构