C# ASP.NET MVC将单个控制器映射到网站的根目录
我正在一个ASP.NET MVC 5网站上工作,该网站有一个公共“营销”网站,其中包含一些静态页面,其中包含有关公司、法律、社交、联系我们等的信息,未登录用户可以访问这些信息。然后,一旦登录,注册用户就可以访问网站的后端功能 最初我有所有的公共“营销”页面,等等 但是,企业希望所有“营销”页面都可以从根网站的单一目录访问,因此可以通过以下方式访问上面的链接: 等等 我知道我可以使用下面的方法,通过为每个“营销”页面注册单独的路线来实现它,如下所示:C# ASP.NET MVC将单个控制器映射到网站的根目录,c#,asp.net,asp.net-mvc,asp.net-mvc-routing,C#,Asp.net,Asp.net Mvc,Asp.net Mvc Routing,我正在一个ASP.NET MVC 5网站上工作,该网站有一个公共“营销”网站,其中包含一些静态页面,其中包含有关公司、法律、社交、联系我们等的信息,未登录用户可以访问这些信息。然后,一旦登录,注册用户就可以访问网站的后端功能 最初我有所有的公共“营销”页面,等等 但是,企业希望所有“营销”页面都可以从根网站的单一目录访问,因此可以通过以下方式访问上面的链接: 等等 我知道我可以使用下面的方法,通过为每个“营销”页面注册单独的路线来实现它,如下所示: routes.MapRoute
routes.MapRoute(
"ShortAbout",
"About",
new { controller = "Marketing", action = "About" }
);
routes.MapRoute(
"ShortSocial",
"Social",
new { controller = "Marketing", action = "Social" }
);
然而,由于大约有15个“营销”页面,这似乎效率低下,而且似乎必须有更好的方法来做到这一点
我还尝试了此处概述的通用路由方法:
但这种方法的问题是,我有一个“营销”页面,与控制器同名,它最终将用户转发到营销子目录。例如,我有一个名为“MachineController”的控制器,在“MarketingController”中我有一个名为“Machine”的操作/页面,因此它使用上述链接中的方法将用户转发到/Marketing/Machine
还有其他想法吗?提前谢谢。我正好遇到了这个问题。一个更简单但更硬编码的解决方案是
routes.MapRoute("MarketingPages", "{action}",
new { controller = "Marketing" },
new { action = @"About|Social" });
最后一个匿名对象将路由约束为匹配操作与提供的正则表达式匹配的路由,该正则表达式只是您希望拥有营销页面的URL的列表。任何其他url(如“/something”)都会通过下面的路由。使用通用方法并重命名您的操作或其他控制器名称。。在一个或另一个好答案中添加
s
。解决了我遇到的问题。谢谢