在哪里可以找到ASP.NET Core MVC中的模型绑定错误?

在对对象执行模型绑定时,如果任何对象的属性存在类型不匹配,则框架似乎将返回null。 例如,考虑这个简单的例子:

public class Client { public string Name { get; set; } public int Age { get; set; } public DateTime RegistrationDate { get; set; } } public class ClientController : Controller { [HttpPatch] public IActionResult Patch([FromBody]Client client) { return Ok("Success!"); } } 

如果我在HTTP请求中为Age属性提交值“asdf”,则无论为其他属性提交了什么,整个客户端参数在Patch方法中都将为null。 RegistrationDate属性也是一样。 因此,当您的控制器操作中的FromBody参数为null时,您如何知道哪些错误导致模型绑定失败(在这种情况下,哪个提交的属性具有错误的类型)?

对不起以前的错误答案。 正如您所说,MVC核心默认改变了MVC API处理模型绑定的方式。 您可以使用当前的ModelState来查看哪些项目失败以及出于什么原因。

  [HttpPatch] [Route("Test")] public IActionResult PostFakeObject([FromBody]Test test) { foreach (var modelState in ViewData.ModelState.Values) { foreach (var error in modelState.Errors) { //Error details listed in var error } } return null; } } 

存储在错误消息中的exception将显示如下内容:

Exception = {Newtonsoft.Json.JsonReaderException:无法将字符串转换为整数:派。 在Newtonsoft.Json.JsonTextReader.FinishReadQuotedNumber(ReadType readType)的Newtonsoft.Json.JsonReader.ReadInt32String(String s)中路径’age’,第1行,第28位…

但是,正如上面的评论中所述,Microsoft文档解释了以下内容:

如果绑定失败,MVC不会抛出错误。 接受用户输入的每个操作都应检查ModelState.IsValid属性。

注意:控制器的ModelState属性中的每个条目都是包含Errors属性的ModelStateEntry。 很少有必要自己查询这个集合。 请改用ModelState.IsValid。 https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding