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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:55:23