Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET核心MVC中处理模型绑定异常?_C#_Json_Asp.net Core_Asp.net Core Mvc_Model Binding - Fatal编程技术网

C# 如何在ASP.NET核心MVC中处理模型绑定异常?

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

从模板创建一个简单的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([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无效。