Я использую привязку модели для параметра в контроллере. Одно из свойств 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.