使用 .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 MVC 模型绑定器将空 JSON 数组绑定到 null?
模型绑定不适用于 asp.net 核心 Web api 控制器操作方法中的 Stream 类型参数。(即使使用自定义流输入格式化程序)