ASP.NET MVC将单个控制器映射到网站的根
本文关键字:网站 映射 控制器 NET MVC 单个 ASP | 更新日期: 2023-09-27 18:11:51
我正在做一个ASP。NET MVC 5网站,它有一个公共"营销"网站,包含一些静态页面,其中包含有关公司,法律,社会,联系我们等信息,非登录用户可以访问。然后,一旦登录,注册用户就可以访问网站的后端功能。
最初我让所有的公共"营销"页面都访问http://www.mywebsite.com/Marketing/About, http://www.mywebsite.com/Marketing/Social等。
然而,企业希望所有的"营销"页面,可以访问一个单一的目录从根网站,所以上面的链接可以访问:http://www.mywebsite.com/About、http://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/
,但这种方法的问题是,我有一个"营销"页面,与控制器同名,它最终将用户转发到营销子目录。例如,我有一个名为"MachineController"的控制器,在"MarketingController"中,我有一个名为"Machine"的动作/页面,所以它使用上述链接中的方法将用户转发到/Marketing/Machine。
还有其他想法吗?
我就遇到过这个问题。一个更简单但更硬编码的解决方案是
routes.MapRoute("MarketingPages", "{action}",
new { controller = "Marketing" },
new { action = @"About|Social" });
最后一个匿名对象将路由限制为匹配动作与提供的正则表达式匹配的路由,正则表达式只是您希望拥有营销页面的url列表。任何其他url,如'/something',都将通过下面的路由。