我正在尝试在asp mvc 5中制作工作自定义错误页面,但由于一些奇怪的原因,在时刻测试我的页面,从elmah我正在记录两个错误(真正的错误我正在测试和错误页面找不到相关的错误:
未找到视图“错误”或其主控,或者没有视图引擎支持搜索的位置。搜索了以下位置:〜/ Views / HotTowel / Error.aspx~ / Views / HotTowel / Error.ascx~ / Views / Shared / Error.aspx~ / Views / Shared / Error.ascx~ / Views / HotTowel / Error。 cshtml~ / Views / HotTowel / Error.vbhtml~ / Views / Shared / Error.cshtml~ / Views / Shared / Error.vbhtml
我正在调查这个网址http://doingthedishes.com/2011/09/10/custom-errors-mvc-3-elmah.html,其中作者有同样的问题,但使用asp.net mvc 3.阅读之后,我尝试删除对HandleErrorAttribute的调用:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//filters.Add(new HandleErrorAttribute());
}
}
但问题仍然存在:我可以看到我的自定义页面,但asp.net mvc抛出两个例外。有帮助吗?
解决方案是重写一个派生自HandleErrorAttribute的类?喜欢这篇文章:keep getting The view "Error" not found when using Elmah and asp.net mvc 4?
您可以从ELMAH.MVC 2.0.2 is out执行以下操作:
disableHandleErrorFilter
设为true
:
<add key="elmah.mvc.disableHandleErrorFilter" value="true" />
filters.Add(new HandleErrorAttribute());
类中删除FilterConfig
:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
// filters.Add(new HandleErrorAttribute()); // <-- comment out
}
}
这是一个可能的解决方案。我通常在基本控制器类中覆盖OnException
方法。 filterContext.HttpContext.IsCustomErrorEnabled
在web.config中检查<customErrors>
。 showVerboseErrors
变量源自web.config中的设置。
protected override void OnException(ExceptionContext filterContext)
{
if (filterContext.HttpContext.IsCustomErrorEnabled)
{
//trigger elmah
Elmah.ErrorSignal.FromCurrentContext().Raise(filterContext.Exception);
//get the last elmah error
var errorList = new List<ErrorLogEntry>();
Elmah.ErrorLog.GetDefault(filterContext.HttpContext.ApplicationInstance.Context).GetErrors(0, 1, errorList);
var error = errorList.LastOrDefault();
//return the custom error page
filterContext.Result = new ViewResult
{
ViewName = "~/Views/Shared/Error.cshtml",
ViewData = new ViewDataDictionary() {
{ "ErrorDetails", showVerboseErrors && error != null ? filterContext.Exception.Message : null },
{ "ErrorId", error != null ? error.Id : null }
}
};
//stop further error processing
filterContext.ExceptionHandled = true;
}
else
{
base.OnException(filterContext);
}
}