Asp.net mvc 4 在c#mvc.net层中处理异常

Asp.net mvc 4 在c#mvc.net层中处理异常,asp.net-mvc-4,Asp.net Mvc 4,我需要一个建议。 有一个MVC操作,它通过一系列调用与数据库交互:控制器->服务->存储库->数据库上下文。 若存储库出现问题(EntityFramework抛出异常),我需要在存储库中捕获它,记录并传递回控制器操作(用户必须知道所需的操作尚未执行)。 最好的方法是什么: 捕捉和重发异常在每个上层玩家中都会出现此异常 从下层捕捉并传递布尔状态(正常/错误) 你还可以提供什么 谢谢。最重要的是不要丢失堆栈跟踪,通常最好的计划是让异常冒泡到最外层的try/catch,这样做确保您只抛出而不是抛出ex

我需要一个建议。 有一个MVC操作,它通过一系列调用与数据库交互:控制器->服务->存储库->数据库上下文。 若存储库出现问题(EntityFramework抛出异常),我需要在存储库中捕获它,记录并传递回控制器操作(用户必须知道所需的操作尚未执行)。 最好的方法是什么:

  • 捕捉和重发异常在每个上层玩家中都会出现此异常
  • 从下层捕捉并传递布尔状态(正常/错误)
  • 你还可以提供什么

  • 谢谢。

    最重要的是不要丢失堆栈跟踪,通常最好的计划是让异常冒泡到最外层的try/catch,这样做确保您只抛出
    而不是抛出ex
    (在下面的代码中)
    throw ex
    类似于从代码中的该点引发新异常,可能会丢失重要错误信息。最重要的是,当有人来修复存储库中发生的任何问题时,他们拥有所有错误详细信息。通常,与其隐瞒真正的错误,不如根本不去捕捉

    您可以在存储库中捕获并将成功/失败bool传递回UI层。如果您这样做,请确保记录整个堆栈跟踪和所有内部执行,请考虑从代码中的单个点调用存储库,在该代码中,您正在捕获并记录所有异常,不同位置的错误处理不同的日志记录会导致丢失的错误细节。 存储库中的try/catch可能如下所示:

    try
    {
        // code which may cause an exception
    }
    catch (Exception ex)
    {
        // You can log here
        throw;
    }
    

    这在不同的线程上已经讨论了很多,所以您应该阅读。

    最重要的是不要丢失堆栈跟踪,通常最好的计划是让异常冒泡到最外层的try/catch,要做到这一点,请确保您只
    抛出
    ,而不是
    抛出ex
    (在下面的代码中)
    throw ex
    类似于从代码中的该点引发新异常,可能会丢失重要错误信息。最重要的是,当有人来修复存储库中发生的任何问题时,他们拥有所有错误详细信息。通常,与其隐瞒真正的错误,不如根本不去捕捉

    您可以在存储库中捕获并将成功/失败bool传递回UI层。如果您这样做,请确保记录整个堆栈跟踪和所有内部执行,请考虑从代码中的单个点调用存储库,在该代码中,您正在捕获并记录所有异常,不同位置的错误处理不同的日志记录会导致丢失的错误细节。 存储库中的try/catch可能如下所示:

    try
    {
        // code which may cause an exception
    }
    catch (Exception ex)
    {
        // You can log here
        throw;
    }
    
    这已经在不同的线程上讨论了很多,所以,您应该阅读