Asp.net mvc 5 使用ASP.NET MVC 5和Elmah的自定义错误页

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

我正在尝试在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的调用:

  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);
    }
    }