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

C# Web API接收继承抽象类的自定义对象时出现400错误求助

C# Web API接收继承抽象类对象返回400错误的解决方案

1. 确保正确使用[FromBody]并验证请求头

必须为控制器方法参数添加[FromBody]属性,同时确认React请求的Content-Type设置为application/json——如果请求头类型不匹配,模型绑定会直接失败,甚至不会进入方法逻辑。

修正后的控制器代码:

[HttpPost]
public async Task<IActionResult> CreateConfiguration([FromBody] CategoryConfiguration categoryConfiguration)
{
    // 先检查模型验证状态,返回详细错误信息
    if (!ModelState.IsValid)
    {
        var validationErrors = ModelState.SelectMany(x => x.Value.Errors)
                                         .Select(e => e.ErrorMessage);
        return BadRequest(new { Errors = validationErrors });
    }
    return Ok();
}

2. 配置抽象基类的多态反序列化

ASP.NET Core默认使用System.Text.Json,它无法自动识别抽象基类对应的具体子类,需要显式配置多态支持:

方式一:在Startup/Program中全局配置

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 为抽象基类添加允许的子类映射
        options.JsonSerializerOptions.TypeInfoResolverChain.Insert(0, 
            new JsonDerivedType(typeof(CategoryConfiguration), nameof(CategoryConfiguration)));
    });

方式二:在抽象基类上添加特性标记

[JsonDerivedType(typeof(CategoryConfiguration))]
public abstract class SystemConfiguration
{
    // 原有属性定义
}

3. 检查请求JSON与模型结构的匹配度

确认React发送的JSON包含CategoryConfiguration及其基类SystemConfiguration的所有必填属性。如果基类中有非可空且无默认值的属性(比如public int MaxCount { get; set; }),而请求JSON未提供该字段,会触发模型验证失败,框架可能会返回模糊的categoryConfiguration字段必填提示,实际是子字段缺失。

4. 排查嵌套对象的反序列化问题

检查Category类是否存在反序列化障碍:比如是否有循环引用、非可空属性未设置默认值、或者自定义构造函数导致序列化器无法实例化对象。这些问题会导致整个CategoryConfiguration的反序列化失败。

5. 禁用全局模型绑定器干扰

如果项目中注册了自定义全局模型绑定器,确认它不会影响继承抽象类的对象绑定。必要时可以为CategoryConfiguration单独指定默认绑定器。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:20:36