.NET Core模型绑定:如何返回200状态码的错误信息
解决方案
要实现返回200状态码且仅包含纯错误消息的需求,你需要自定义InvalidModelStateResponseFactory的逻辑,从ModelState中提取出仅有的错误消息,再用OkObjectResult返回。
实现步骤
修改你在Startup.cs(或.NET 6+的Program.cs)中的配置代码,替换原有的响应工厂逻辑:
services.Configure<ApiBehaviorOptions>(options => { options.InvalidModelStateResponseFactory = actionContext => { // 提取每个字段对应的错误消息列表,生成简洁的字典结构 var cleanErrors = actionContext.ModelState .Where(entry => entry.Value.Errors.Any()) .ToDictionary( entry => entry.Key, entry => entry.Value.Errors.Select(error => error.ErrorMessage).ToList() ); // 返回200状态码+纯错误消息结构 return new OkObjectResult(cleanErrors); }; });
效果说明
这段代码会遍历ModelState中存在验证错误的字段,只提取每个字段对应的错误消息,最终返回的响应体结构如下(以你的示例为例):
{ "Name": ["Name is required"] }
可选调整
如果你希望返回更扁平的错误结构(比如所有错误消息的列表,或单个错误消息),可以修改提取逻辑:
返回所有错误消息的列表
var allErrors = actionContext.ModelState .Values .SelectMany(entry => entry.Errors) .Select(error => error.ErrorMessage) .ToList(); return new OkObjectResult(new { Errors = allErrors });
响应体示例:
{ "Errors": ["Name is required"] }
返回第一个错误消息
var firstError = actionContext.ModelState .Values .SelectMany(entry => entry.Errors) .FirstOrDefault()?.ErrorMessage; return new OkObjectResult(new { Error = firstError });
响应体示例:
{ "Error": "Name is required" }
内容的提问来源于stack exchange,提问作者CuriousCode
相关产品推荐
相关产品推荐

