C# 使用.net核心json模型绑定在无效json上引发json验证错误

C# 使用.net核心json模型绑定在无效json上引发json验证错误,c#,.net,json,entity-framework,.net-core,C#,.net,Json,Entity Framework,.net Core,我有一些简单的控制器,它们使用.net核心模型绑定来创建一个使用json输入的实体 当发送无效的json(json,由于输入错误或缺少转义而无法正确解析)时,用户将为null,并抛出一个无用错误 如何引发json验证错误并将json格式不正确的信息返回给api调用方 [HttpPost] [ProducesResponseType(typeof(User), StatusCodes.Status200OK)] [ProducesResponseType(typeof(HttpErrorRespo

我有一些简单的控制器,它们使用.net核心模型绑定来创建一个使用json输入的实体

当发送无效的json(json,由于输入错误或缺少转义而无法正确解析)时,用户将为null,并抛出一个无用错误

如何引发json验证错误并将json格式不正确的信息返回给api调用方

[HttpPost]
[ProducesResponseType(typeof(User), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(HttpErrorResponse), StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> Post([FromBody]User user)
{
    return Ok(this.userService.CreateNewUser(user));
}
[HttpPost]
[产品响应类型(用户类型),状态代码。状态200OK]
[ProductsResponseType(typeof(HttpErrorResponse),StatusCodes.Status500InternalServerError)]
公共异步任务发布([FromBody]用户)
{
返回Ok(this.userService.CreateNewUser(user));
}

有两件事可以做:

首先,如果它是API,则使用
ApiController
属性而不是
Controller
属性。这将为您处理模型状态/解析错误处理

另一个选项是选中
ModelState.IsValid
。e、 g

公共异步任务发布([FromBody]用户)
{
如果(!this.ModelState.IsValid)
返回BadRequest(this.ModelState);
返回Ok(this.userService.CreateNewUser(user));
}
第一种选择我比较喜欢。还因为它似乎在json无效的情况下会产生更好的错误