是否可以为“尝试捕获”治疗创建全局类?

时间:2019-12-18 00:47:43

标签: c# .net-core try-catch

我是新开发者。 我正在使用C#处理ASP .NET Core项目,并使用“ try catch”进行错误处理。但是,由于太多的“ try catch”,我的项目变得越来越繁琐,并且代码也变得有些混乱。

我的问题是是否有可能创建“全局类”或其他方法来处理错误?

2 个答案:

答案 0 :(得分:1)

是的。

您的问题已经以here的身份得到了回答

以下是使用不同项目类型的四个示例:

通过实现自定义ExceptionFilterAttribute来实现ASP.NET Core MVC:

public class MyExceptionFilterAttribute : ExceptionFilterAttribute
{
    public override void OnException(ExceptionContext context)
    {
        Exception ex = context.Exception;
        Logger.Error(ex);
    }
}

[Route("api/[controller]")]
[MyExceptionFilter]
public class HomeController : Controller
{
    // Action methods
}

通过在控制器中覆盖OnException来实现ASP.NET MVC:

protected override void OnException(ExceptionContext context)
{
    if (context.ExceptionHandled)
    {
        return;
    }
    Logger.Error(context.Exception);
    context.Result = RedirectToAction(MVC.Error.Application());
    context.ExceptionHandled = true;
}

通过订阅UnhandledException事件来访问Windows应用程序:

static void Main()
{
    AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
}

private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    Console.WriteLine(e.ExceptionObject.ToString());
}
通过在global.asax中添加Application_Error处理程序来

Web表单:

protected void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();
    Logger.Error(ex);
}

答案 1 :(得分:-4)

如果是的话,答案是肯定的。但是,这取决于您正在进行的项目类型。您可以通过覆盖方法在global.cs中捕获未处理的异常,也可以创建Attribute类来捕获异常。