Asp.net mvc 5 使用ASP.NET MVC 5和Elmah的自定义错误页
我正在尝试在asp mvc 5中创建自定义错误页面,但出于某些奇怪的原因,为了测试我的页面,我从elmah登录了两个错误(我正在测试的真实错误和未找到与错误页面相关的错误): 未找到视图“错误”或其主视图,或者没有视图引擎支持搜索的位置。搜索了以下位置: ~/Views/hottower/Error.aspx ~/Views/hottower/Error.ascx ~/Views/Shared/Error.aspx ~/Views/Shared/Error.ascx ~/Views/hottower/Error.cshtml ~/Views/hottower/Error.vbhtml ~/Views/Shared/Error.cshtml ~/Views/Shared/Error.vbhtml 我正在查看此url,其中作者也有相同的问题,但与asp.net mvc 3有关。阅读后,我尝试删除对HandleErrorAttribute的调用:Asp.net mvc 5 使用ASP.NET MVC 5和Elmah的自定义错误页,asp.net-mvc-5,elmah,Asp.net Mvc 5,Elmah,我正在尝试在asp mvc 5中创建自定义错误页面,但出于某些奇怪的原因,为了测试我的页面,我从elmah登录了两个错误(我正在测试的真实错误和未找到与错误页面相关的错误): 未找到视图“错误”或其主视图,或者没有视图引擎支持搜索的位置。搜索了以下位置: ~/Views/hottower/Error.aspx ~/Views/hottower/Error.ascx ~/Views/Shared/Error.aspx ~/Views/Shared/Error.ascx ~/Views/hottow
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//filters.Add(new HandleErrorAttribute());
}
}
但是问题仍然存在:我可以看到我的自定义页面,但是asp.NETMVC抛出了两个异常。
有什么帮助吗
解决方案是重写从HandleErrorAttribute派生的类?
就像这篇文章:?您可以从以下位置执行以下操作:
disableHandleErrorFilter
设置为true
:
过滤器。添加(新的HandleErrorAttribute());
来自FilterConfig
类:
公共类过滤器配置
{
公共静态无效注册表全局过滤器(全局过滤器集合过滤器)
{
//filters.Add(新HandleErrorAttribute())这里有一个可能的解决方案。我通常重写基本控制器类中的OnException
方法。filterContext.HttpContext.IsCustomErrorEnabled
检查web.config中的
。showVerboseErrors
变量来自web.config中的设置
受保护的覆盖无效OneException(ExceptionContext filterContext)
{
if(filterContext.HttpContext.IsCustomErrorEnabled)
{
//触发埃尔玛
Elmah.ErrorSignal.FromCurrentContext().Raise(filterContext.Exception);
//获取最后一个elmah错误
var errorList=新列表();
Elmah.ErrorLog.GetDefault(filterContext.HttpContext.ApplicationInstance.Context).GetErrors(0,1,errorList);
var error=errorList.LastOrDefault();
//返回自定义错误页
filterContext.Result=新的ViewResult
{
ViewName=“~/Views/Shared/Error.cshtml”,
ViewData=新的ViewDataDictionary(){
{“ErrorDetails”,showVerboseErrors&&error!=null?filterContext.Exception.Message:null},
{“ErrorId”,error!=null?error.Id:null}
}
};
//停止进一步的错误处理
filterContext.ExceptionHandled=true;
}
其他的
{
base.OnException(filterContext);
}
}