Default和catchall路线问题

时间:2009-04-29 16:07:31

标签: asp.net-mvc routing

我定义了很多显式路由。其中之一是:

routes.MapRoute("default", "",
  new { controller = "Home", action = "Index" });

最后,我定义了一条捕获路线:

routes.MapRoute("PageNotFound", "{*url}",
  new { controller = "Error", action = "Http404" });

如果我转到主页http://localhost,则会显示http404页面。奇怪的是,如果我删除了捕获路线,那么欢迎页面会正确显示。 另请注意,我有一个菜单,我调用Url.RouteUrl(“默认”),并正确生成了主页的链接。

那么,为什么我的默认路线在存在捕捉路线时没有被激活?

更新:我正在使用routes.RouteExistingFiles = true。如果我删除它,它会按预期工作。但我需要将它设置为true。这有什么问题?

感谢。

3 个答案:

答案 0 :(得分:0)

如果你使用“routes.RouteExistingFiles = true”,这意味着它将把现有(物理上存在的)文件作为它自己的路由 - 因此将跳过这些路由。我认为在你的根网站上可能有一个“default.aspx”或“index.htm”或类似的东西。

启用RouteExistingFiles将允许这些文件正常执行(而不是通过路由)。

现在我认为发生的事情是你的catchall路由覆盖了你的RouteExistingFiles - 所以它会自动将default.aspx路由到你的404 catchall。

答案 1 :(得分:0)

如果您仍然在RegisterRoutes()中拥有默认路由 (IE {controller} / {action} / {id}) ,它将捕获与之匹配的所有网址普通MVC请求的格式。

换句话说,如果不符合正常格式( blah / blah / blah / blah ),则全能路径只能拦截错误的网址。

对于不存在的控制器,必须通过传统的ASP.NET处理来处理异常。

有关处理此here

的详细说明

答案 2 :(得分:0)

你是否尝试对捕获所有路线施加约束?约束应该告诉它catch-all段不应该有0个字符。