【问题标题】:ASP.NET MVC map single controller to root of websiteASP.NET MVC 将单个控制器映射到网站的根目录
【发布时间】:2015-09-08 20:22:14
【问题描述】:

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

最初我将所有公共“营销”页面都转到http://www.mywebsite.com/Marketing/Abouthttp://www.mywebsite.com/Marketing/Social 等。

但是,企业希望所有“营销”页面都可以从根网站的单个目录中访问,因此可以通过以下方式访问上面的链接: 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/

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

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

【问题讨论】:

  • 使用通用方法并重命名您的操作或其他控制器名称.. 将s 添加到其中一个或另一个

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


【解决方案1】:

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

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

最后一个匿名对象将路由限制为匹配操作与提供的正则表达式匹配的路由,该正则表达式只是您希望拥有营销页面的 URL 列表。任何其他 url 像 '/something' 都属于下面的路由。

【讨论】:

  • 好答案。解决了我遇到的问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-10-02
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
相关资源
最近更新 更多