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

问题描述 投票:1回答:1

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

  1. 即使使用无效输入,我怎么能实现我的控制器方法被调用,所以我可以自己处理错误情况?
  2. 有没有办法编写我自己的中间件,以便以我的系统需要的方式记录无效输入,或者是否有我可以使用的默认输入?
c# asp.net-core asp.net-core-mvc asp.net-core-2.1
1个回答
3
投票

在asp.net核心2.1中,ApiController属性已被introduced作为选择Web API特定约定和行为的方式。在启动时使用CompatibilityVersion.Version_2_1标志来设置compatibility的级别。

新的行为是验证错误将automatically trigger an HTTP 400 response。如文档中所述,很容易抑制此行为:

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

在这种情况下,您可以照常验证模型:

if (!ModelState.IsValid)
{
    return BadRequest(ModelState);
}

至于你的第二个问题,这太宽泛了:

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

你可以使用filters(如ExceptionFilterAttribute)。也许这就是你要找的东西?

© www.soinside.com 2019 - 2024. All rights reserved.