我无法在我的 MVC4 应用程序中使用自定义 HandleErrorAttribute。
记录异常的自定义类
public class HandleAndLogErrorAttribute : HandleErrorAttribute
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public override void OnException(ExceptionContext filterContext)
{
var message = string.Format("Exception : {0}\n" +
"InnerException: {1}",
filterContext.Exception,
filterContext.Exception.InnerException);
Logger.Error(message);
base.OnException(filterContext);
}
}
在 Global.asax 我添加了一个新的静态方法:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleAndLogErrorAttribute()); //Todo: log all errors
throw new Exception("not called???");
}
}
引发异常时,将加载 error.chstml,但从不调用自定义 HandlErrorAttribute 中的 OnException 覆盖。
我怀疑 Global.asax 中的 RegisterGlobalFilters 方法没有被调用,并且在那里抛出异常(参见代码)证实了这一点。永远不会抛出该异常。
在 web.config 文件中,我将 customErrors 设置为 On:
<customErrors mode="On">
</customErrors>
我在另一个解决方案中使用了相同的方法,但我不明白为什么这个 HandleErrorAttribute 扩展不起作用。