C#学习教程:找不到错误页面,使用自定义错误页面引发ELMAH错误404和500)这是代码:publicclassMvcApplication:System.Web.HttpApplication{protectedvoidApplication_Start(){AreaRegistration.RegisterAllAreas();WebApiConfig.Register(GlobalConfiguration.Configuration);//FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);}protectedvoidApplication_Error(objectsender,EventArgse){if(Context.IsCustomErrorEnabled){ShowCustomErrorPage)LastError(Get)。;}}privatevoidShowCustomErrorPage(Exceptionexception){HttpExceptionhttpException=exceptionasHttpException;if(httpException==null){httpException=newHttpException(500,"内部服务器错误",异常);}Response.RoClear(routeData=newRouteData();routeData.Values.Add("controller","Error");routeData.Values.Add("fromAppErrorEvent",真);switch(httpException.GetHttpCode()){案例403:routeData.Values.Add("action","AccessDenied");休息;案例404:routeData.Values.Add("action","NotFound");休息;案例500:routeData.Values.Add("action","ServerError");休息;默认值:routeData.Values.Add("action","DefaultError");routeData.Values.Add("httpStatusCode",httpException.GetHttpCode());休息;}Server.ClearError();IController控制器=newErrorController();controller.Execute(newRequestContext(newHttpContextWrapper(Context),routeData));以下.Config已添加到Web:自定义错误页面显示正确,ELMAH将正确记录(故意)抛出的错误但是ELMAH还会捕获并记录一个额外的错误:System.InvalidOperationException:未找到视图“错误”或其主视图,或者没有视图引擎支持搜索的位置。搜索了以下位置:~/Views/account/Error。aspx~/Views/account/Error.ascx~/Views/Shared/Error.aspx~/Views/Shared/Error.ascx~/Views/account/Error.cshtml~/Views/account/Error.vbhtml~/Views/Shared/Error.cshtml~/Views/Shared/Error.vbhtml我的第一直觉让我禁用过滤器配置中的全局HandleErrorAttribute。并且,类似的SO问题,例如:带有自定义错误页面的MVC问题让我相信我的怀疑是正确的。但即使在禁用全局HandleErrorAttribute之后,我仍然收到无法找到错误视图的错误!是什么赋予了?我唯一的其他预感是我的基本控制器派生自System.Web.Mvc.Controller我尝试检查源以查看HandleErrorAttribute是否应用于System.Web.Mvc.Controller但无法收集任何东西......更新:我尝试覆盖我的基本控制器来标记异常,如下所示:base.OnException(filterContext);但这并没有解决问题。UPDATE2:我将Error.aspx文件放入共享视图中只是为了看看会发生什么。当它在那里时,ELMAH会记录强制异常,然后提供共享视图-它永远不会到达Application_Error()....不太确定该怎么做。终于让我满意地工作了......Elmah.Mvc包应用了一个“隐藏的”错误处理程序。我通过在web.config中添加以下行禁用了此功能(默认情况下,该值从nuget安装设置为“false”)因此,现在我的错误被传播到Application_Error并由Elmah记录,绕过Elmahfilter,并显示正确的错误页面(不是/shared/error.cshtml中的那个)如果你运行在IIS7集成模式下,你需要添加Response.TrySkipIisCustomErrors=true;在应用程序错误中。否则,无论您在代码中做什么,IIS仍会将客户端重定向到自定义错误页面。有关更多详细信息,请参见此处:http://www.west-wind.com/weblog/posts/2009/Apr/29/IIS-7-Error-Pages-taking-over-500-Errors编辑:这是文本我的Application_Error:以上是C#学习教程:找不到错误页面,使用自定义错误页面触发ELMAH错误分享。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注—if(HttpContext.Current!=null){Server.ClearError();Response.TrySkipIisCustomErrors=true;RouteDatadata=newRouteData();data.Values.Add("控制器","错误");数据。Values.Add("动作","错误");IController控制器=newMyApp.Controllers.ErrorController();controller.Execute(newRequestContext(newHttpContextWrapper(Context),data));}本文收集自网络,不代表任何内容,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
