在控制器的每个方法中都有一个通用的 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
处理程序的方法调用另一个方法,则没有理由将处理程序放在另一个方法中。
我正在尝试改进我的 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
处理程序的方法调用另一个方法,则没有理由将处理程序放在另一个方法中。