处理c#mvc.net图层中的异常

时间:2015-07-28 05:01:25

标签: asp.net-mvc-4

我需要一个建议。 有一个MVC动作,它通过一系列调用与数据库交互:Controller-> Service-> Repository-> DbContext。 如果存储库出现问题(实体框架抛出异常),我需要在存储库中捕获它,记录并传回控制器操作(用户必须知道尚未执行所需的操作)。 最好的方法是:

  1. 在每个上层玩家中捕获并重新抛出异常此异常
  2. 从下层捕获并传递bool状态(ok / error)
  3. 你可以提供的其他东西
  4. 感谢。

1 个答案:

答案 0 :(得分:0)

最重要的是不要丢失堆栈跟踪,通常最好的计划是让异常冒泡到最外层的try / catch,这样做可以确保只throw而不是{{1} (在下面的代码中)。 throw ex就像在代码中从该点抛出一个新的异常,可能会丢失重要的错误信息。最重要的是,当有人来修复存储库中发生的任何问题时,他们会获得所有错误详细信息。通常最好不要抓住隐藏真正的错误。

您可以捕获存储库并将成功/失败bool传回UI层。如果这样做,请确保记录整个堆栈跟踪和所有内部执行,请考虑从代码中的单个点调用存储库,然后记录所有异常,不同的日志记录,只需稍微不同的错误处理即可导致丢失错误的详细信息。

您在存储库中的try / catch可能如下所示:

throw ex

这已经在各种线程上进行了很多讨论,你应该阅读Throwing Exceptions best practices