如何覆盖ASP.NET Core序列化错误提示信息?
自定义ASP.NET Core模型验证错误信息,替换JSON转换底层提示
要替换默认暴露底层实现的错误提示,返回通用的“字段XX无效”信息,可以通过自定义模型验证错误响应工厂来实现,具体步骤如下:
1. 全局配置错误响应逻辑
在Program.cs(.NET 6+)或Startup.cs(.NET 5及更早)中,配置ApiBehaviorOptions来拦截并修改模型验证错误:
// Program.cs 示例 var builder = WebApplication.CreateBuilder(args); // 添加控制器服务 builder.Services.AddControllers(); // 配置自定义模型验证错误响应 builder.Services.Configure<ApiBehaviorOptions>(options => { options.InvalidModelStateResponseFactory = context => { // 遍历所有模型错误,替换JSON转换类错误信息 var customErrors = context.ModelState .Where(entry => entry.Value.Errors.Any()) .ToDictionary( entry => entry.Key, entry => entry.Value.Errors.Select(error => { // 判断是否为JSON转换异常(类型不匹配导致) if (error.Exception is JsonException) { return $"字段{entry.Key}无效"; } // 其他类型的错误(比如必填项为空)保留原提示 return error.ErrorMessage; }).ToArray() ); return new BadRequestObjectResult(new { Errors = customErrors }); }; }); var app = builder.Build(); app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
2. 效果验证
当你传入int类型给String字段时,接口会返回如下格式的响应:
{ "Errors": { "String": [ "字段String无效" ] } }
补充说明
- 这个逻辑全局生效,所有控制器的模型绑定错误都会被统一处理;
- 如果需要针对特定字段做更精细的自定义提示,可以在判断时结合字段名做特殊处理;
- 对于非JSON转换类的错误(比如
[Required]校验失败),会保留原有的错误提示,也可根据需求统一修改。
内容的提问来源于stack exchange,提问作者Gabor
相关产品推荐
相关产品推荐

