Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以为“创建全局类”;试一试“接球”;治疗?_C#_.net Core_Try Catch - Fatal编程技术网

C# 是否可以为“创建全局类”;试一试“接球”;治疗?

C# 是否可以为“创建全局类”;试一试“接球”;治疗?,c#,.net-core,try-catch,C#,.net Core,Try Catch,我是一个新的开发者。 我正在用C#开发一个ASP.NET核心项目,并使用“try catch”进行错误处理。然而,由于太多的“try-catch”,我的项目变得越来越繁重,代码也变得有点混乱 我的问题是,是否可以创建一个“全局类”或其他方法来处理错误?如果我这样做,答案绝对是肯定的。不过,这取决于您正在做的项目类型。您可以通过重写方法在global.cs中捕获未处理的异常,或者创建一个属性类来捕获异常。可以 你的问题已经以某种身份得到了回答 以下是使用不同项目类型的四个示例: ASP.NET核心

我是一个新的开发者。 我正在用C#开发一个ASP.NET核心项目,并使用“try catch”进行错误处理。然而,由于太多的“try-catch”,我的项目变得越来越繁重,代码也变得有点混乱


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

如果我这样做,答案绝对是肯定的。不过,这取决于您正在做的项目类型。您可以通过重写方法在global.cs中捕获未处理的异常,或者创建一个属性类来捕获异常。

可以

你的问题已经以某种身份得到了回答

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

ASP.NET核心MVC,通过实现自定义
ExceptionFilterAttribute

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
}
ASP.NET MVC,通过覆盖控制器中的
OneException

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\u Error
handler来创建Web表单:

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

你确定你没有滥用try…catch吗?它们不应该太多……看看你的项目是否“因为太多的“try-catch”而变得沉重,代码也变得有点混乱”,那么很可能你做错了
try/catch
适用于特殊情况。大多数情况下(尤其是在低级方法中),您应该让异常冒泡到调用方,调用方最终知道如何处理异常并采取一些纠正措施。此外,
public
是类可以拥有的最广泛的范围。“全局”是什么意思?是的,您可以删除一些try/catch块,例如,如果您编写一个扩展方法来捕获计时器中经过的每个ex。但您应该做的是:仅在确实需要时捕获错误,对于空指针等,您不需要try/catch。相反,可以添加所有全局错误处理程序,这样可以修复大多数错误,而不是到处捕获它们。您可以添加他要求的ASP.NET核心版本,并使用中间件