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

ASP.NET Core自定义模型绑定错误:修改错误键$及合理性探讨

ASP.NET Core Web API 请求体校验错误键名修改问题

1. 如何修改错误键$的名称?

你可以通过自定义ValidationProblemDetailsFactory来替换默认的错误键名,核心思路是拦截框架生成校验问题详情的过程,将键中的$替换为你想要的名称。具体实现步骤如下:

步骤1:创建自定义校验问题详情工厂

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.AspNetCore.Mvc.ModelBinding;

public class CustomValidationProblemDetailsFactory : ValidationProblemDetailsFactory
{
    private readonly ApiBehaviorOptions _apiBehaviorOptions;

    public CustomValidationProblemDetailsFactory(ApiBehaviorOptions apiBehaviorOptions)
    {
        _apiBehaviorOptions = apiBehaviorOptions;
    }

    public override ProblemDetails CreateValidationProblemDetails(
        HttpContext httpContext,
        ModelStateDictionary modelStateDictionary,
        int statusCode = StatusCodes.Status400BadRequest,
        string title = null,
        string type = null,
        string detail = null,
        string instance = null)
    {
        // 把所有错误键中的`$`替换为自定义名称,比如"requestBody"
        var modifiedModelState = new ModelStateDictionary();
        foreach (var entry in modelStateDictionary)
        {
            var newKey = entry.Key.Replace("$", "requestBody");
            modifiedModelState.Add(newKey, entry.Value);
        }

        return base.CreateValidationProblemDetails(
            httpContext,
            modifiedModelState,
            statusCode,
            title,
            type,
            detail,
            instance);
    }
}

步骤2:注册自定义工厂到DI容器

在Program.cs中添加注册代码:

builder.Services.AddSingleton<ValidationProblemDetailsFactory, CustomValidationProblemDetailsFactory>();

这样当请求体类型不匹配(比如传入数组而非单个对象)时,错误键就会变成你指定的名称,比如requestBody。

2. 是否应该修改该键名?

是否修改取决于你的API使用场景:

  • 不需要修改的场景:如果API面向熟悉REST规范或JSON Path的开发者,$是JSON Path中根节点的标准表示,开发者能快速理解这是请求体根级别类型不匹配的错误,保持默认值更符合行业规范。
  • 建议修改的场景:如果API面向非技术用户、前端开发团队,或者你希望错误格式的键名风格统一(比如其他错误键都是实体属性名),将$改为requestBody或root这类直观名称,能降低理解成本,提升错误信息的友好性。

内容的提问来源于stack exchange,提问作者Stephan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:35:00