在ASP.NET Core Web API中,使用 [FromBody] 参数将请求的 JSON 数据绑定到参数对象上,通常使用类作为参数类型。在绑定 JSON 数据时,Web API 会忽略类中不存在的 JSON 属性,即使这些属性在同一个 JSON 对象中出现。这可能会导致一些意外情况,例如您可能希望 Web API 拒绝存在无效字段的请求,但实际效果是 Web API 会默默地忽略这些字段。
为了解决这个问题,可以使用 JsonSerializerSettings
来控制 Web API 的 JSON 序列化和反序列化。通过设置 MissingMemberHandling
属性为 MissingMemberHandling.Error
,JSON 反序列化器将抛出异常,如果请求中包含未知属性,则 Web API 会返回 400 状态码。
下面是一个使用 JsonSerializerSettings
的示例:
[HttpPost]
public IActionResult Post([FromBody] MyRequestModel request)
{
JsonSerializerSettings settings = new JsonSerializerSettings
{
MissingMemberHandling = MissingMemberHandling.Error
};
try
{
string jsonData = JsonConvert.SerializeObject(request, settings);
// your code here
return Ok();
}
catch (JsonSerializationException ex)
{
return BadRequest(ex.Message);
}
}