ASP.NET MVC将单个控制器映射到网站的根目录

时间:2015-09-08 20:22:15

标签: c# asp.net asp.net-mvc asp.net-mvc-routing

我正在开发一个ASP.NET MVC 5网站,该网站有一个公共"营销"网站包含一些静态页面,其中包含未登录用户可以访问的公司,法律,社交,联系我们等信息。然后,一旦登录,网站的后端就会有注册用户可以访问功能。

最初我有所有的公众"营销"页面转到http://www.mywebsite.com/Marketing/Abouthttp://www.mywebsite.com/Marketing/Social

然而,企业需要所有的营销和#34;页面,可以从根网站向下访问单个目录,因此上面的链接可以通过以下方式访问: http://www.mywebsite.com/Abouthttp://www.mywebsite.com/Social

我知道我可以使用以下方法通过为每个"营销"注册个别路线来使其工作。像这样的页面:

        routes.MapRoute(
            "ShortAbout",
            "About",
            new { controller = "Marketing", action = "About" }
        );

        routes.MapRoute(
            "ShortSocial",
            "Social",
            new { controller = "Marketing", action = "Social" }
        );

然而,因为大约有15"营销"页面,这似乎效率低下,似乎必须有更好的方法来做到这一点。

我还尝试了此处概述的通用路由方法:http://www.wduffy.co.uk/blog/aspnet-mvc-root-urls-with-generic-routing/

但这种方法的问题是我有一个"营销"页面,与控制器同名,最终将用户转发到marketing子目录。例如,我有一个名为" MachineController"的Controller,以及" MarketingController"我有一个名为" Machine"的动作/页面,因此它使用上述链接中的方法将用户转发到/ Marketing / Machine。

还有其他想法吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

我确实遇到了这个问题。一个更简单但更硬编码的解决方案是

routes.MapRoute("MarketingPages", "{action}",
  new { controller = "Marketing" },
  new { action = @"About|Social" });

最后一个匿名对象约束路由以匹配操作与提供的正则表达式匹配的路由,这只是您希望拥有营销页面的网址列表。任何其他网址如' / something'落到下面的路线。