Почему поведение ModelState изменяется, когда я использую пользовательский конвертер JSON? - PullRequest
0 голосов
/ 14 января 2019

Я использую привязку модели для параметра в контроллере. Одно из свойств MyInputContract принимает DateTime. Например,

[HttpPost]
[Route("search")]
public IActionResult SearchStuff(
    [FromBody] MyInputContract inputContract)
{
    if (!ModelState.IsValid)
    {
        // Handle the errors and return an appropriate response.
    }

    // No ModelState errors. Continue...
}

Это работает, как и ожидалось, даже если передан неверный DateTime - например, "2018-02-311". ModelState.IsValid возвращает false, и я справляюсь с этим.

  • Однако, когда я использую пользовательский конвертер, обработка ошибок меняется.

Я использую Newtontonsoft IsonDateTimeConverter при запуске. Это работает хорошо и, как и ожидалось, для ввода / вывода моего желаемого формата даты - когда дата действительна.

// The following is added in ConfigureServices...AddJsonOptions.
var isoConverter = new IsoDateTimeConverter();
isoConverter.DateTimeFormat = "mycustomformat";
settings.Converters.Add(isoConverter);

Но при использовании этого конвертера, когда дата недействительна, вызов больше не переходит к контроллеру с ModelState.IsValid = false.

Я могу поймать это на «глобальном уровне» в автозагрузке. Но я бы хотел обработать это в контроллере как обычно, чтобы я мог возвращать и другие ошибки ModelState.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...