MVC路由 - 避免在同一位置使用多个URL

时间:2011-02-28 20:39:26

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

ASP.net MVC中的默认路由如下:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

这意味着我可以通过多种方式访问​​HomeController / Index操作方法:

http://localhost/home/index
http://localhost/home/
http://localhost/

如何避免为同一操作设置三个网址?

3 个答案:

答案 0 :(得分:4)

如果您只想:

http://localhost/

然后:

routes.MapRoute(
    "Default",
    "",
    new { controller = "Home", action = "Index" }
);

如果您只想:

http://localhost/home/

然后:

routes.MapRoute(
    "Default",
    "home",
    new { controller = "Home", action = "Index" }
);

如果你只想:

http://localhost/home/index

然后:

routes.MapRoute(
    "Default",
    "home/index",
    new { controller = "Home", action = "Index" }
);

答案 1 :(得分:1)

您正在看到默认值。

删除控制器和操作的默认值。

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new {id = UrlParameter.Optional } // Parameter defaults
    );

这将使用户输入控制器&动作。

答案 2 :(得分:0)

我不认为你是为SEO做这个吗? Google会对您的重复内容进行处罚,因此值得您考虑一下。

如果是这种情况,路由不是解决问题的最佳方法。您应该在首页的<head>中添加规范链接。因此,将<link href="http://www.mysite.com" ref="canonical" />放在Views / Home / Index.aspx页面的头部以及任何网址搜索引擎访问您的主页,所有SEO值都将归因于规范链接中引用的网址。

更多信息:about the canonical tag

我去年写了一篇关于SEO concerns from a developer perspective的文章,如果你正在研究这种东西