.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
相关产品推荐
相关产品推荐

