C#学习教程:一劳永逸什么是处理MVC错误、异常和404的最佳路由方式优雅地处理404和异常。根据我的阅读,最好的建议似乎是这样的404路由:routes.MapRoute("404-PageNotFound","{*url}",new{controller="ErrorController",action="PageNotFound"});然后,对于其他错误,在Controller上设置HandleError属性并在web.config中打开CustomErrors,这样它就会转到error.cshtml页面。但我读过,如果您遇到未将HTTP代码设置为500的异常,则HandleError将不起作用。我们最终能否为处理404/Exceptions/ASP.Net错误提供一个答案/最佳实践,并将其应用到我们所有的项目中?谢谢我使用简单的错误处理设置。它很好也很简单。可以在http://erictopia.com/2010/04/building-a-mvc2-template-part-7-custom-web-errors-and-adding-support-for-elmah/找到更多信息安装ELMAH并让它处理所有错误。接下来创建一个错误控制器。添加一个包罗万象的路由,如下所示:routes.MapRoute("ErrorHandler",//Routename"{*path}",//URLnew{controller="Error",action="Index"});然后在网络上。在配置中添加此部分:无需设置404路由。在全局asax应用程序启动时,如果控制器存在但操作不存在,或者操作返回404结果,则设置全局过滤器以捕获404。filters.Add(newHttpNotFoundFilterAttribute{Order=99});其中filter是具有此覆盖的ActionFilterAttribute:publicoverridevoidOnActionExecuted(ActionExecutedContextfilterContext){if(filterContext.Result!=null&&(filterContext.Result.GetType()==typeof(HttpNotFoundResult)){//你可以转移到一个已知路由,例如filterContext.Result=newTransferResult(SomeAction,SomeController);}}如果控制器不存在,则在Application_Error中:Exceptionex=Server.GetLastError();stringuri=null;if(Context!=null&&Context.Request!=null){uri=Context.Request.Url.AbsoluteUri;}ExceptionbaseEx=ex.GetBaseException();varhttpEx=exasHttpException;if((httpEx!=null&&httpEx.GetHttpCode()==404)||(uri!=null&&Context.Response.StatusCode==404)){/*做你想做的。*///示例:显示一些已知的urlServer.ClearError();Server.TransferRequest(transferUrl);}To避免处理404静态资源,建议在Windows7或Windows2008R2上安装SP1升级级别IIS7并在web.config中设置:以上是C#学习教程:一劳永逸什么是MVC中处理错误、异常和404的最佳路由方式所有内容分享,如果对大家有用需要想了解更多C#学习教程,希望大家多多关注-...本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
