我试图在Global.asax中覆盖OnException来处理错误并写入日志。我不确定哪个部分出错了,我继续收到错误" MyApp.MvcApplication.OnException(System.Web.Mvc.ExceptionContext)':找不到合适的方法来覆盖"每当我重建我的解决方案。
这是我在Application_Start()
中的代码 protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
}
这是我在OnException()
中的代码protected override void OnException(ExceptionContext context)
{
Exception ex = context.Exception;
if (!string.IsNullOrEmpty(ex.Message) ||
!string.IsNullOrEmpty(ex.Source.ToString()) ||
!string.IsNullOrEmpty(ex.StackTrace))
{
WriteLog(ex.Message.ToString(), ex.StackTrace.ToString(), ex.Source.ToString(), "0");
context.Result = new ViewResult
{
ViewName = String.Format("~/ErrorPage/ErrorPage?message={0}&stack={1}&source={2}", HttpUtility.UrlEncode(ex.Message), HttpUtility.UrlEncode(ex.StackTrace), HttpUtility.UrlEncode(ex.Source))
};
}
context.ExceptionHandled = true;
}
WriteLog()函数在其他应用程序中进行了测试,我不认为它有任何问题,我甚至尝试过:
protected override void OnException(ExceptionContext context) {
Exception ex = context.Exception;
context.Result = new ViewResult
{
ViewName = "~/Shared/Error.cshtml";
};
context.ExceptionHandled = true;
}
但没有任何效果。错误就在那里。
怎么会出现这样的问题,我该如何解决?我读了很多关于这个的教程,我不认为我错误地拼写了OnException()。
请帮忙。感谢
答案 0 :(得分:2)
OnException
Global.asax
您有两种方式:
创建您自己的HandleErrorAttribute
并注册FilterConfig.cs
public class HandleExceptionsAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
(...)
}
}
FilterConfig.cs:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleExceptionsAttribute());
(...)
}
或者,如果您有一个BaseController
,其中所有控制器都是继承的,则覆盖OnException
方法。
PS:我会选择过滤器。
答案 1 :(得分:0)
全局asax中没有方法OnException,该方法属于controllers.to处理全局asax中的错误使用方法 Application_Error(object sender,EventArgs e)