代码之家  ›  专栏  ›  技术社区  ›  Nicolas Cadilhac

NET MVC路由:在URL中包含单个元素的最佳方式?

  •  1
  • Nicolas Cadilhac  · 技术社区  · 17 年前

    我将以so站点为例。要转到问题列表,请访问www.stackoverflow.com/questions。在场景后面,这将转到一个控制器(其名称未知)及其一个操作。假设这是 控制器=主页 和 行动=问题 .

    如何防止用户键入www.stackoverflow.com/ 家 / 问题 这将导致相同的网页,并会降低网页的排名,就搜索引擎优化而言。要解决这个问题需要重定向吗?处理这种情况需要一些特殊的路由规则吗?还有别的吗?

    谢谢

    3 回复  |  直到 17 年前
        1
  •  1
  •   tvanfosson    17 年前

    我以为控制员是 questions 行动是 index ,即路由处理程序定义的默认操作。因此没有可供选择的页面路径。

        2
  •  1
  •   Craig Stuntz    17 年前

    期间 Phil Haack's presentation from PDC ,jeff显示了堆栈溢出的一些源代码。他展示的东西包括一些路线登记的代码。他在控制器里有这些,我不清楚他是否使用了默认路由。例如,如果没有默认路径,您就不需要担心/home/questions。

    至于/questions/index,是的,一个永久的重定向是可行的。你将不会得到任何搜索引擎惩罚永久重定向。

    消除/回家/问题的另一种方法是使用路线约束。

        3
  •  1
  •   Nick Berardi    17 年前

    您要使用以下路径。您只需创建一个新的路由就可以轻松地消除控制器在路由中的需要。创建一个模板字符串,该字符串只包含操作,并将控制器默认为要使用的控制器,例如“home”。

    routes.MapRoute(
        "MyRoute",
        "{action}",
        new { controller = "Home", action = (string)null },
        new { action = "[a-zA-z_]+" }
    );
    

    希望这有帮助。