我似乎无法弄清楚这一点.我正在尝试使用MVC Beta,我正在尝试实现一个catchall路由,这样如果用户输入mysite.com/blah而不是mysite.com/home/index,它将会出现"错误"路径.
不幸的是,似乎"默认"路线总是首先捕获"嘘声".事实上,我唯一能够进入"错误"路线的路线是blah/blah/blah/blah.
这是它应该工作的方式,因为我已经看到其他示例具有"默认"和"错误"路由设置就像这样,似乎如果他们要键入一个不存在它的控制器会点击"错误"路线.
有什么我缺少的(很可能)或者我只需要为每个控制器创建一个特定的路由?
我正在使用的代码:
routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); routes.MapRoute( "Error", "{*catchall}", new { controller = "Base", action = "Error", id = "404" } );
谢谢杰夫
为了处理错误,我在我的一个项目中使用了Application_Error事件:
protected void Application_Error(object sender, EventArgs e) { Exception exception = Server.GetLastError(); HttpException httpException = exception as HttpException; if (httpException != null) { RouteData routeData = new RouteData(); routeData.Values.Add("controller", "Error"); routeData.Values.Add("action", "HttpError500"); if (httpException.GetHttpCode() == 404) { routeData.Values["action"] = "HttpError404"; } Server.ClearError(); Response.Clear(); IController errorController = new ErrorController(); errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData)); } }
您的第一条路线将捕获大多数网址,因为您有元素的默认值,您可以使用Phil Haack的路径调试器将其可视化,请参阅链接:
路由调试器