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