【问题标题】:Issue with Default and catchall routes默认路由和包罗万象的路由问题
【发布时间】:2009-04-29 16:07:31
【问题描述】:

我定义了很多明确的路线。其中之一是:

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

最后,我定义了一个包罗万象的路线:

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

如果我转到主页http://localhost,则会显示http404页面。奇怪的是,如果我删除了包罗万象的路线,那么欢迎页面就会正确显示。 另请注意,我有一个菜单,我在其中调用 Url.RouteUrl("default") 并且正确生成了指向主页的链接。

那么,为什么存在包罗万象的路由时我的默认路由没有激活?

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

谢谢。

【问题讨论】:

    标签: asp.net-mvc routing


    【解决方案1】:

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

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

    现在我认为发生的情况是你的包罗万象的路由覆盖了你的 RouteExistingFiles - 所以它会自动将 default.aspx 路由到你的 404 包罗万象中。

    【讨论】:

      【解决方案2】:

      如果您在 RegisterRoutes() 中仍有默认路由 (I.E. {controller}/{action}/{id}),它将捕获与普通 MVC 请求的格式。

      换句话说,catch-all 路由只能拦截不符合正常格式 (blah/blah/blah/blah) 的错误 URL。

      如果控制器不存在,则必须通过常规的 ASP.NET 处理来处理异常。

      有一个很好的描述来处理这个here

      【讨论】:

        【解决方案3】:

        您是否尝试对“catch all”路线施加约束?约束应该告诉它包罗万象的段不应该有 0 个字符。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-20
          • 2011-04-02
          • 2011-10-13
          • 2014-05-05
          • 2021-09-09
          • 1970-01-01
          • 2021-08-17
          • 2016-02-22
          相关资源
          最近更新 更多