C# 如何在ASP.NET核心MVC中处理模型绑定异常?
从模板创建一个简单的ASP.NET核心MVC web应用程序。创建一个名为C# 如何在ASP.NET核心MVC中处理模型绑定异常?,c#,json,asp.net-core,asp.net-core-mvc,model-binding,C#,Json,Asp.net Core,Asp.net Core Mvc,Model Binding,从模板创建一个简单的ASP.NET核心MVC web应用程序。创建一个名为Human的类: public class Human { public string Name { get; set; } public int Age { get; set; } public DateTime Birthday { get; set; } } 现在创建一个HumanController来发布一个人工实例: [HttpPost] public Human Post([Fro
Human
的类:
public class Human
{
public string Name { get; set; }
public int Age { get; set; }
public DateTime Birthday { get; set; }
}
现在创建一个HumanController
来发布一个人工实例:
[HttpPost]
public Human Post([FromBody] Human human)
{
return human;
}
使用Fiddler或PostSharp(或任何其他客户端)将这些JSON对象发布到此服务:
{
"Name": "someone"
}
及
及
由于生日
不能为null,并且无效年龄
不能解析为有效的模型属性,因此我们在服务参数中得到的是null。事实证明,这很难调试
是否有一种方法可以将ASP.NET核心MVC配置为只部分绑定模型,或者让我们以某种方式钩住它的默认行为,这样我们就可以捕获异常并将它发送的错误数据通知客户端?我认为,如果您向模型添加适当的属性,您可以处理它并向客户端返回适当的错误消息。 例如,您可以在
Name
上添加一些要求,如:
public class Human
{
[Required(ErrorMessage ="")]
[StringLength(10)]
public string Name { get; set; }
public int Age { get; set; }
public DateTime Birthday { get; set; }
}
public IActionResult Index(Human model)
{
if (!ModelState.IsValid)
return BadRequest("message");
//to do
return View();
}
通过这种方式,您可以检查您的模型,如果模型无效,则返回BadRequest
如下:
public class Human
{
[Required(ErrorMessage ="")]
[StringLength(10)]
public string Name { get; set; }
public int Age { get; set; }
public DateTime Birthday { get; set; }
}
public IActionResult Index(Human model)
{
if (!ModelState.IsValid)
return BadRequest("message");
//to do
return View();
}
您是否考虑过检查模型状态以查看是否列出了绑定错误?我们希望在每个操作之外以某种方式进行检查。中间件之类的东西。根本不是我想要的答案。首先,我不想使用声明式验证,因为它功能不强,在复杂的验证中会失败,为了一致性,我到处使用命令式验证。其次,我不想费心用样板代码到处创建特定的消息。正如我在问题中所说的,我正在寻找一种配置ASP.NET Core MVC的通用方法。这个答案与validatemodelattribute相结合是可行的。模型绑定异常将在执行控制器操作之前发生,因此答案至少对.NET Core 3.1无效。