【问题标题】:Handle invalid requests errors in .net core 2.1 web api处理 .net core 2.1 web api 中的无效请求错误
【发布时间】:2018-07-14 14:25:04
【问题描述】:

我有什么:

  • 一个简单的 Web API - POST api/examples
  • 邮递员发送请求。

当我使用设置为 application/json 的内容类型发出请求时,一切正常。但是当我更改为其他任何内容时,我会得到以下响应:

{
    "": [
        "The input was not valid."
    ]
}

从 Kestrel 日志中我得到:

应用程序在未读取整个请求正文的情况下完成。

这就是 web api 处理无效请求的方式。我想知道的是如何捕获和处理这种异常并更改默认消息。

我确实有一个错误处理中间件,但在这种情况下,请求是无效的,所以它永远不会被调用。

如何更改此默认行为?

【问题讨论】:

    标签: .net-core asp.net-core-webapi


    【解决方案1】:

    好吧,过了一段时间,我不得不回到这个问题。

    我发现此验证与 ASP.NET Core Framework 的自动模型状态验证有关。因此,每次将无效值传递给 Web API 控制器时,都会先执行一个过滤器 ModelStateInvalidFilter,并最终触发 400 错误请求:“输入无效。”

    虽然有一些方法可以覆盖此行为,但就我而言,我发现最好禁用它。为此,只需在 ConfigureServices 方法中将以下行添加到您的 Startup.cs

    services.Configure<ApiBehaviorOptions>(options =>
    {
        options.SuppressModelStateInvalidFilter = true;
    });
    

    关于这个以及如何覆盖它的更多细节,你可以在这里查看:

    http://www.talkingdotnet.com/disable-automatic-model-state-validation-in-asp-net-core-2-1/

    这里:

    Correct way to disable model validation in ASP.Net Core 2 MVC

    【讨论】:

      猜你喜欢
      • 2019-01-07
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 2019-06-12
      • 1970-01-01
      • 2022-09-30
      相关资源
      最近更新 更多