Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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# 使用[FromBody]并能够处理无效输入_C#_Asp.net Core_Asp.net Core Mvc_Asp.net Core 2.1 - Fatal编程技术网

C# 使用[FromBody]并能够处理无效输入

C# 使用[FromBody]并能够处理无效输入,c#,asp.net-core,asp.net-core-mvc,asp.net-core-2.1,C#,Asp.net Core,Asp.net Core Mvc,Asp.net Core 2.1,在ASP.NET Core(本例中为2.1)中的控制器中使用[FromBody]时,它会处理到指定模型的所有转换,并确保模型有效。这意味着,如果提供的输入格式不正确,控制器方法甚至不会被调用 我如何实现即使在输入无效的情况下也会调用我的控制器方法,这样我就可以自己处理错误情况了 有没有一种方法可以编写自己的中间件,让它以我的系统需要的方式记录无效的输入,或者有没有一种我可以使用的默认方法 在asp.net core 2.1中,ApiController属性被用作选择Web API特定约定和行为的

在ASP.NET Core(本例中为2.1)中的控制器中使用
[FromBody]
时,它会处理到指定模型的所有转换,并确保模型有效。这意味着,如果提供的输入格式不正确,控制器方法甚至不会被调用

  • 我如何实现即使在输入无效的情况下也会调用我的控制器方法,这样我就可以自己处理错误情况了
  • 有没有一种方法可以编写自己的中间件,让它以我的系统需要的方式记录无效的输入,或者有没有一种我可以使用的默认方法

  • 在asp.net core 2.1中,
    ApiController
    属性被用作选择Web API特定约定和行为的方式。在启动中使用
    CompatibilityVersion.Version_2_1
    标志设置兼容性级别

    新的行为是验证错误将被忽略。如文档中所述,很容易抑制这种行为:

    services.Configure<ApiBehaviorOptions>(options =>
    {
        options.SuppressModelStateInvalidFilter = true;
    });
    
    至于你的第二个问题,这太宽泛了:

    。。。要以系统需要的方式记录无效输入


    有(如
    ExceptionFilterAttribute
    )可以使用。也许这就是你想要的?

    是的,是的。我使用由dotnet cores mvc模板生成的默认控制器模板。有多个独立的dotnet core应用程序正在运行。它们都相互作用。由于我们严重依赖数据,但质量不足,因此我希望能够自己处理无效请求,方法是在将它们转换为有效的ModelState之前尝试修复它们,或者发出有意义的日志消息,这些消息可以由工程师审查,以便稍后修复。因为所有的服务都将执行相同的日志报告,我想可能是一个中间件,它负责为每个人进行自定义验证,因此不是每个控制器功能都需要手动检查。因为第一个是最重要的。如果有一种方法可以自动处理所有这些,我仍然很感兴趣。
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }