【问题标题】:asp.net MVC3 global route and hardcoded routesasp.net MVC3 全局路由和硬编码路由
【发布时间】:2011-11-24 20:22:44
【问题描述】:

我有一个应用程序,我正在使用全局路由来查询当前路径并返回特定于页面的数据。我有这样的路线设置......

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

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

        routes.MapRoute(
            "Default", // Route name
            "{*url}", // URL with parameters {controller}/{action}/{id}
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

我面临的问题是,当我转到 /Pages 尝试添加新页面时,PageController 会按预期触发,但是在调试时,转到 /Pages 后,应用程序会向 HomeController 发出请求。我的路由设置是否遗漏了什么?

【问题讨论】:

    标签: asp.net asp.net-mvc-3 routing


    【解决方案1】:

    默认路由因为 {*url} 而被触发。所以任何不是 /Pages 的页面都会走默认路由。

    我需要更多信息,但如果您尝试执行 /Pages/whatever,则需要在您的 Pages 路由中添加一个可选参数:

    routes.MapRoute(
           "Pages",
           "Pages/{page}",
           new { controller = "Pages", action = "Index", page = UrlParameter.Optional });
    

    【讨论】:

      【解决方案2】:

      您的默认路线不正确。当您打开一个新的 MVC 3 项目时,它应该看起来像定义的默认路由,如下所示:

      routes.MapRoute(
           "Default", // Route name
           "{controller}/{action}/{id}", // URL with parameters
           new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
      ); 
      

      问题是你定义的默认路由不会解析任何到达它的请求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-08
        • 1970-01-01
        • 2012-04-26
        • 1970-01-01
        • 1970-01-01
        • 2012-05-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多