Повышение ошибки проверки json при недопустимом json с использованием привязки модели .net core json

У меня есть несколько простых контроллеров, которые используют привязку базовой модели .net для создания объекта с использованием ввода json.

При отправке недопустимого json (json, который не может быть правильно проанализирован из-за опечатки или отсутствия escape-кода) пользователь будет иметь значение 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));
}

person PascalTurbo    schedule 16.03.2020    source источник


Ответы (1)


Есть 2 вещи, которые можно сделать:

Во-первых, если это 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.

person Sander Homan    schedule 16.03.2020