在控制器的每个方法中都有一个通用的 try/catch 是个好主意还是有更好的方法?

Is it good idea to have a general try/catch in every method in a controller or is there a better way?

我正在尝试改进我的 MVC.NET Core-fu,我最终在我的所有控制器中使用了一堆方法,看起来像这样(注意最外层的、一般的、重复的 try -catch).

[HttpPost]
public IActionResult DoSomething([FromBody] Thing thing)
{
  try
  {
    if (...)
      return Ok(thing);
    else
      return NotFound();
  }
  catch (Exception) { return BadRequest(); }
}

依我看,我想要坏人请求以防万一。现在,这给原本相当简单的控制器增加了很多代码,我怀疑之前有人已经想到了这一点并提出了解决方案。

我还没有找到这样的东西(我被告知过滤器在 Core 中的使用已经过时了)。可能是因为我不熟悉正确的搜索键。

我觉得这太过分了。许多方法不会执行可能会失败的指令。对于那些极其罕见的情况,全局错误处理程序就足够了。

对于那些访问磁盘、数据库或执行可能引发异常的计算的方法(您应该首先避免的事情),try...catch 块是有意义的。

但即使在这些情况下,如果带有 try...catch 处理程序的方法调用另一个方法,则没有理由将处理程序放在另一个方法中。