ASP.NETMVC 404错误处理

ASP.NETMVC 404错误处理

我在ASP.NETMVC中404 http错误处理程序(RC 5)我仍然得到标准404错误页面。我需要更改IIS中的某些内容吗?



呼唤远方
浏览 339回答 3
3回答

胡子哥哥

还有另一个解决办法。将ErrorController或静态页面添加到包含404错误信息的页面中。修改web.config(在控制器的情况下)。<system.web> &nbsp;&nbsp;&nbsp;&nbsp;<customErrors&nbsp;mode="On"&nbsp;> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<error&nbsp;statusCode="404"&nbsp;redirect="~/Errors/Error404"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;</customErrors></system.web>或者在静态页面的情况下<system.web> &nbsp;&nbsp;&nbsp;&nbsp;<customErrors&nbsp;mode="On"&nbsp;> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<error&nbsp;statusCode="404"&nbsp;redirect="~/Static404.html"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;</customErrors></system.web>这将处理错过的路线和错过的行动。

POPMUISE

马可的反应是最好的解决办法。我需要控制我的错误处理,我的意思是真正控制它。当然,我已经稍微扩展了解决方案,并创建了一个完整的错误管理系统来管理一切。我也在其他博客上读到过这个解决方案,它似乎被大多数高级开发人员所接受。下面是我使用的最后代码:protected&nbsp;void&nbsp;Application_EndRequest() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(Context.Response.StatusCode&nbsp;==&nbsp;404) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;exception&nbsp;=&nbsp;Server.GetLastError(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;httpException&nbsp;=&nbsp;exception&nbsp;as&nbsp;HttpException; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Clear(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Server.ClearError(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;routeData&nbsp;=&nbsp;new&nbsp;RouteData(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routeData.Values["controller"]&nbsp;=&nbsp;"ErrorManager"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routeData.Values["action"]&nbsp;=&nbsp;"Fire404Error"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routeData.Values["exception"]&nbsp;=&nbsp;exception; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.StatusCode&nbsp;=&nbsp;500; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(httpException&nbsp;!=&nbsp;null) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.StatusCode&nbsp;=&nbsp;httpException.GetHttpCode(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(Response.StatusCode) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;404: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routeData.Values["action"]&nbsp;=&nbsp;"Fire404Error"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Avoid&nbsp;IIS7&nbsp;getting&nbsp;in&nbsp;the&nbsp;middle &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.TrySkipIisCustomErrors&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IController&nbsp;errormanagerController&nbsp;=&nbsp;new&nbsp;ErrorManagerController(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpContextWrapper&nbsp;wrapper&nbsp;=&nbsp;new&nbsp;HttpContextWrapper(Context); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;rc&nbsp;=&nbsp;new&nbsp;RequestContext(wrapper,&nbsp;routeData); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errormanagerController.Execute(rc); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}在我的ErrorManagerController内部:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;Fire404Error(HttpException&nbsp;exception) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//you&nbsp;can&nbsp;place&nbsp;any&nbsp;other&nbsp;error&nbsp;handling&nbsp;code&nbsp;here &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;PageNotFoundException("page&nbsp;or&nbsp;resource"); &nbsp;&nbsp;&nbsp;&nbsp;}现在,在我的操作中,我抛出了我创建的自定义异常。并且我的Controller是从我创建的自定义Controller类继承的。创建自定义基本控制器是为了覆盖错误处理。下面是我的定制BaseController类:public&nbsp;class&nbsp;MyBasePageController&nbsp;:&nbsp;Controller{ &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;override&nbsp;void&nbsp;OnException(ExceptionContext&nbsp;filterContext) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filterContext.GetType(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filterContext.ExceptionHandled&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.View("ErrorManager",&nbsp;filterContext).ExecuteResult(this.ControllerContext); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.OnException(filterContext); &nbsp;&nbsp;&nbsp;&nbsp;}}上面代码中的“ErrorManager”只是一个使用基于ExceptionContext的模型的视图我的解决方案工作完美,我能够处理我的网站上的任何错误,并显示基于任何异常类型的不同消息。
打开App,查看更多内容
随时随地看视频慕课网APP