我正在对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错误。