使用自定义JSON转换器时,为什么ModelState行为会更改?

时间:2019-01-14 17:06:54

标签: .net json .net-core modelstate

我正在对Controller中的参数使用模型绑定。 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进行到Controller。

我可以在Startup的“全局级别”中捕获它。但是我想像往常一样在Controller中处理它,因此我也可以返回其他ModelState错误。

0 个答案:

没有答案