【问题标题】:Run a method every time a try catch is used in ASP.NET每次在 ASP.NET 中使用 try catch 时运行一个方法
【发布时间】:2017-06-22 15:18:07
【问题描述】:

我想知道是否可以编写每次在 ASP.NET 中使用 try catch 块时运行的代码,而不必在 try catch 块内的方法或代码中添加任何属性。 我的意思是一段代码用于整个项目中的所有尝试捕获。 是否可以自定义 try catch 或每次使用 try catch 时调用方法? 提前致谢

【问题讨论】:

  • 我知道你想这样做,但很可能你真的在寻找一种全局处理错误的方法,你应该研究全局错误处理
  • @johnny5 是对的。您需要的可能是类似于HandleErrorAttribute 的操作过滤器。你甚至可能想从中获得。然后,您可以使用 FilterConfig.cs 全局应用它。
  • @devKoen1 你想做什么? Elmah 和 Glimpse 已经捕获了错误信息。将它们添加到项目中会添加适当的挂钩。 Application Insights 等 APM 库的工作方式相同。所有这些都允许您以编程方式记录/发送特定消息。
  • 如果没有本地处理程序处理异常,则全局异常处理程序工作。你还没有解释你想做什么。最有可能的是,已经有一个可用的解决方案。例如,Polly 允许您将重试、超时等指定为策略。
  • ELMAH 和所有日志框架还允许您用一行记录异常。大多数日志框架接受异常作为参数。 ELMAH 允许您通过Error SignalingErrorSignal.FromCurrentContext.Raise(exc); 记录异常

标签: c# asp.net-mvc try-catch


【解决方案1】:

你要找的终于是:

try {}
catch(Exception ex)
{}
finally {
//Code executes after try catch regardless of outcome
}

你真正在寻找什么:

   public class GlobalExceptionLogger : ExceptionLogger
    {
        public override void Log(ExceptionLoggerContext context)
        {
            //elmah logging code for context.exception
        }
    }

【讨论】:

  • 谢谢,但我的意思是整个项目中的一段代码用于项目中的每次尝试捕获。我会让问题更具体。
  • @devKoen1 没问题,您是在理论上问是否可能,还是您正在尝试解决问题?
  • @RandomUs1r 全局异常处理程序可用于所有平台。 WInforms、WPF、Webforms、MVC。
  • 解决某个问题。问题是,我们希望为每个捕获应用 elmah 错误日志,我希望有一个比为每个捕获添加代码更短的解决方案。
  • @devKoen1 如果我理解正确,您正在寻找的是全局异常记录器,请参阅更新的答案。
【解决方案2】:

您可以编写自己的 try-catch,如下所示:

public static class Try
{
    public static void Action(Action a)
    {
        try
        {
            a();
        }
        catch (Exception e)
        {
            //do whatever you want here
            throw new OtherException(e.Message, e);
        }
    }
}

并在您的项目中随处使用它:

Try.Action(() => 
// code to be wrapped with try
));

【讨论】:

  • 这行不通,目前的情况是您无法指定 catch 块的内部,您需要其他操作
猜你喜欢
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多