Asp.net mvc 在ASP.NET MVC中放置异常日志的位置

Asp.net mvc 在ASP.NET MVC中放置异常日志的位置,asp.net-mvc,exception-handling,Asp.net Mvc,Exception Handling,请任何人解释一下下面两种方法的区别 登录控制器的OneException事件: try { //code } catch { //rollback trasanctions throw; } 或者,登录catch块: try { //code } catch { //logging here //rollback trasactions throw; } 当请求处理过程中出现未处理的异常时,将使用控制器的OnExcep

请任何人解释一下下面两种方法的区别

登录控制器的OneException事件:

try
{
    //code         
}
catch
{
    //rollback trasanctions
    throw;
}
或者,登录catch块:

try
{
    //code   
}
catch
{
   //logging here
   //rollback trasactions
   throw;
}

当请求处理过程中出现未处理的异常时,将使用控制器的
OnException
方法。它指示发生意外异常时应执行的功能。你真的应该只在你搞砸了或者系统以意外的、致命的方式出现故障的情况下使用它作为保护措施

如果您正在执行某段代码,希望引发特定异常,请将其包装在
try
块中,并相应地处理特定异常。这种防御性的方法将帮助您在问题发生时立即调试问题,而不是等到问题冒泡到您不知道原因的地步

试想一下,如果您有多个操作方法,并且每个控制器只有一个
OnException
方法,那么您需要处理一个更复杂的问题,因为任何操作方法或过滤器都可能抛出错误。但是,如果捕获到由特定服务调用调用的异常,那么您已经确切地知道是什么导致了意外行为,并且相应地解决该异常会容易得多

阅读本文以获得更多理解:埃里克·利珀特(Eric Lippert)有一篇优秀的文章,他将我们遇到的不同类别的例外情况进行了分类,并提供了解决这些问题的最佳实践。可在以下网址下载:。如果你不知道Eric Lippert是谁,他非常聪明,如果你用C#编写代码,你应该听他的。他的主要观点是:

  • 不要捕捉致命的异常;不管怎么说,你对他们无能为力,而试图让事情变得更糟

  • 修复您的代码,使其永远不会触发boneheaded异常–生产代码中永远不会发生“索引超出范围”异常

  • 通过调用在非异常情况下抛出的那些烦恼方法的“Try”版本,尽可能避免烦恼异常。如果无法避免调用一个烦恼方法,请捕获它的烦恼异常

  • 始终处理指示意外外部条件的异常;一般来说,预测每一次可能的失败都是不值得或不实际的。只需尝试该操作并准备好处理异常

更新 刚刚意识到我没有明确地解决“日志”问题。避免在控制器范围内处理致命/外生错误可能是最有意义的,因为最终往往会重复逻辑。在全局操作筛选器中可以更好地处理此行为

这篇codeproject文章解释了如何覆盖默认的
HandleErrorAttribute
并利用
ErrorController
使其可以全局应用


此外,以下由5部分组成的博客系列深入分析了MVC应用程序中错误处理的不同选项:

当请求处理过程中出现未处理的异常时,将使用控制器的
OnException
方法。它指示发生意外异常时应执行的功能。你真的应该只在你搞砸了或者系统以意外的、致命的方式出现故障的情况下使用它作为保护措施

如果您正在执行某段代码,希望引发特定异常,请将其包装在
try
块中,并相应地处理特定异常。这种防御性的方法将帮助您在问题发生时立即调试问题,而不是等到问题冒泡到您不知道原因的地步

试想一下,如果您有多个操作方法,并且每个控制器只有一个
OnException
方法,那么您需要处理一个更复杂的问题,因为任何操作方法或过滤器都可能抛出错误。但是,如果捕获到由特定服务调用调用的异常,那么您已经确切地知道是什么导致了意外行为,并且相应地解决该异常会容易得多

阅读本文以获得更多理解:埃里克·利珀特(Eric Lippert)有一篇优秀的文章,他将我们遇到的不同类别的例外情况进行了分类,并提供了解决这些问题的最佳实践。可在以下网址下载:。如果你不知道Eric Lippert是谁,他非常聪明,如果你用C#编写代码,你应该听他的。他的主要观点是:

  • 不要捕捉致命的异常;不管怎么说,你对他们无能为力,而试图让事情变得更糟

  • 修复您的代码,使其永远不会触发boneheaded异常–生产代码中永远不会发生“索引超出范围”异常

  • 通过调用在非异常情况下抛出的那些烦恼方法的“Try”版本,尽可能避免烦恼异常。如果无法避免调用一个烦恼方法,请捕获它的烦恼异常

  • 始终处理指示意外外部条件的异常;一般来说,预测每一次可能的失败都是不值得或不实际的。只需尝试该操作并准备好处理异常

更新 刚刚意识到我没有明确地解决“日志”问题。避免在控制器范围内处理致命/外生错误可能是最有意义的,因为最终往往会重复逻辑。在全局操作筛选器中可以更好地处理此行为

这篇codeproject文章解释了如何覆盖默认的
HandleErrorAttribute
并利用
ErrorController
使其可以全局应用

此外,以下由5部分组成的博客系列深入分析了MVC applic中错误处理的不同选项