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

.NET Core 7 Web API Post方法验证:多余参数未触发400错误

解决.NET Core 7 Web API中接收额外/缺失参数不报错的问题

要实现仅接收符合EMP定义的参数,多余或缺失参数时返回400错误,需要从JSON序列化配置和模型验证两方面入手:

1. 禁止JSON序列化时忽略额外属性

默认情况下,System.Text.Json会自动忽略未匹配到模型属性的JSON字段,导致额外参数不会触发错误。需要在Program.cs中修改序列化配置,禁止这种行为:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 禁止额外属性,传入未定义字段时抛出序列化异常
        options.JsonSerializerOptions.DisallowExtraProperties = true;
        // 保持大小写不敏感(可选,根据业务需求调整)
        options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
    });

如果你的项目使用Newtonsoft.Json(Json.NET),则配置方式如下:

builder.Services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        // 遇到未匹配的字段时抛出错误
        options.SerializerSettings.MissingMemberHandling = MissingMemberHandling.Error;
    });

配置后,当传入额外参数时,序列化过程会抛出异常,框架自动返回400 Bad Request。

2. 强制校验必填参数(防止参数过少)

给EMP类的两个属性添加[Required]特性,确保缺失任一参数时触发模型验证错误:

using System.ComponentModel.DataAnnotations;

public class EMP
{
    [Required(ErrorMessage = "Param1为必填项")]
    public string Param1 { get; set; }

    [Required(ErrorMessage = "Param2为必填项")]
    public int Param2 { get; set; }
}

3. 控制器方法中校验模型状态

在SaveEMP方法中,检查模型验证状态,无效时返回400错误:

[HttpPost]
public IActionResult SaveEMP([FromBody] EMP emp)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    // 执行你的业务逻辑代码
    return Ok("保存成功");
}

这样一来:

  • 传入额外参数:序列化失败,返回400
  • 缺失必填参数:模型验证失败,返回400
  • 参数完全匹配:正常执行业务逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:52:50