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

Posted

技术标签:

【中文标题】使用 .net 核心 json 模型绑定在无效 json 上引发 json 验证错误【英文标题】:Raise json validation error on invalid json using .net core json model binding 【发布时间】:2020-06-27 09:07:57 【问题描述】:

我有一些简单的控制器,它们使用 .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));

【问题讨论】:

【参考方案1】:

有两件事可以做:

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

另一个选项是检查ModelState.IsValid。例如

public async Task<IActionResult> Post([FromBody]User user)

    if(!this.ModelState.IsValid)
       return BadRequest(this.ModelState);
    return Ok(this.userService.CreateNewUser(user));

第一个选项是我的偏好。也因为它似乎在无效 json 的情况下会产生更好的错误。

【讨论】:

以上是关于使用 .net 核心 json 模型绑定在无效 json 上引发 json 验证错误的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET MVC Core 2 中使用 MetadataPropertyHandling 模型绑定 JSON 数据

asp.net 核心中的 jwt 令牌无效

.net 核心请求列表参数始终为空

为啥 ASP.Net MVC 模型绑定器将空 JSON 数组绑定到 null?

模型绑定不适用于 asp.net 核心 Web api 控制器操作方法中的 Stream 类型参数。(即使使用自定义流输入格式化程序)

将 JSON 数组绑定到 ASP.NET MVC 3 中的列表的故障模型