【问题标题】:MVC3 Catch all path segments in URLMVC3 捕获 URL 中的所有路径段
【发布时间】:2015-08-03 22:03:13
【问题描述】:

我正在尝试将 MVC3 应用程序的旧版区域嵌入到网站新根布局内的 iframe 中。

目的是节省时间并避免网站新旧部分之间的 Javascript 和 CSS 样式冲突。

到目前为止,我已经能够有条件地将流量从旧区域重定向到区域控制器中 OnActionExecuting 方法中的新 URL。

例如http://localhost:80/Area/Account/Profilehttp://localhost:80/App/Area/Account/Profile

我现在的麻烦是设置一个可以将整个 URL 传递给特定操作和控制器的 catch all 路由,以便我可以获取 URL 并将其应用到 iFrame。

我的路由中有这个,但它没有将路径传递给操作,如果路径中有多个段,它根本不会到达路由:

routes.MapRoute(
    "AppRedirect", // Route name
    "App/{*page}", // URL with parameters
    new { controller = "Home", action = "App", page = UrlParameter.Optional }
);

有没有一种方法可以让路线与包括所有路段在内的完整路径一起工作?

或者有没有更好的方法将项目区域之一嵌入到新根布局中的 iFrame 中,同时保持与旧配置类似的可读 URL?如果有帮助,我不想修改旧Area的结构或路由配置。

【问题讨论】:

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


    【解决方案1】:

    您知道网址中可能有多少个段吗?您可以设置多个指向同一个控制器操作的路由(按层次结构 - 大多数段过滤为一个),然后在其中完成其余的操作。

    routes.MapRoute(
    "AppRedirect2", // Route name
    "App/{seg1}/{seg2}", // URL with parameters
    new { controller = "Home", action = "App", seg1 = UrlParameter.Optional, seg2 = UrlParameter.Optional }
    );
    
    routes.MapRoute(
    "AppRedirect1", // Route name
    "App/{seg1}", // URL with parameters
    new { controller = "Home", action = "App", page = UrlParameter.Optional }
    );
    

    等等……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      相关资源
      最近更新 更多