我想通过大量的建议来使用全局HandleErrorAttribute
,但这个属性似乎直接显示Error
视图,让我无法记录异常。我不认为该视图是日志记录和其他业务逻辑的正确位置。
我也可以选择在OnException
覆盖BaseController
,但我担心会与HandleErrorAttribute
发生冲突。如果我按如下方式覆盖OnException
,未处理异常,是否会继续HandleErrorAttribute
?
protected override void OnException(ExceptionContext filterContext)
{
Exception exception = filterContext.Exception;
var controller = filterContext.RouteData.Values["controller"].ToString();
var action = filterContext.RouteData.Values["action"].ToString();
logger.Error(exception, "Exception in controller '{0}': action '{1}'.", controller, action);
filterContext.Exception = exception;
//filterContext.ExceptionHandled = true;
}
或者我如何记录异常呢?我相信上面两种方法使我无法在每个操作方法上实现'try-catch',并且通过捕获特定的异常,这可能是相当繁琐的。我还想选择重新启动应用程序,或者应该发生一些真正的灾难性异常,并且HandleErrorAttribute
不会为此留下太多空间。
答案 0 :(得分:3)
通常,Global.asax是一个很好的地方:
protected void Application_Error(object sender, EventArgs e)
{
// Get the exception object.
Exception exception = Server.GetLastError();
// Handle Exception
// Call Server.ClearError() if the exception is properly handled
}
答案 1 :(得分:1)
是使用Global.asax
protected void Application_Error(object sender, EventArgs e)
{
System.Web.HttpRuntime.UnloadAppDomain();
}
答案 2 :(得分:0)
查看StackExchange.Exceptional,这是一个为SO创建并使用的开源异常记录器。