如何在ASP.NET MVC中创建友好的URL?

39

你想看到哪种URL结尾,是这个/catalogue/BrowseByStyleLevel/1/Higher?还是这个/catalogue/BrowseByStyleLevel/Higher? - liggett78
理想情况下是第二个,但我需要ID以便每次根据文本进行查找。 - Kieron
请参考 http://stackoverflow.com/a/20662188/1298685 获取 ASP.NET MVC 5 的解决方案。 - Ian Campbell
3个回答

52

解决这个问题有两个步骤。首先,创建一个新的路由或更改默认路由以接受一个额外的参数:

routes.MapRoute(  "Default", // Route name
                   "{controller}/{action}/{id}/{ignoreThisBit}", 
                   new { controller = "Home", 
                         action = "Index", 
                         id = "",
                         ignoreThisBit = ""}  // Parameter defaults )
现在您可以在URI的末尾输入任何想要的内容,应用程序将忽略它。
当您呈现链接时,需要添加“友好”的文本:
<%= Html.ActionLink("Link text", "ActionName", "ControllerName",
                    new { id = 1234, ignoreThisBit="friendly-text-here" });

1
嗨,如果我尝试这样做,从Html.ActionLink生成的URL会像这样:/Catalogue/BrowseBySubject/3?subject=chemistry而不是/Catalogue/BrowseBySubject/3/chemistry有什么想法吗? 我已经在“默认”路由下方添加了路由,并将名称更改为“BrowseBySubject”。 - Kieron
6
这意味着它没有找到正确的路线。将路线移动到默认路线上面(如果没有其他区别它们的东西,比如约束条件,那么默认路线将被隐藏)。使用约束条件使得只有在需要时才能找到这条新路线(例如,在目录/按主题浏览或者符合你的规则的任何地方)。 - Craig Stuntz
1
@CraigStuntz,你的方法相比其他方法似乎更容易。但这样做是否有利于SEO? - Shaiju T

3

这是我在应用程序中实现Slug URL的方法。 注意:默认的Maproute不应更改,而且路由按照它们添加到路由列表中的顺序进行处理。

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

谢谢您的留言,路由匹配顺序确实很重要,就像大多数框架一样。 - Dr1Ku

1

你在 global.asax 中有一个路由

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

你可以像这样定义自己的路由:

控制器是位于控制器文件夹内的cs类。

你可以用你选择的名称来定义你的id。

系统将把该值传递给你的actionResult方法。

你可以在这里阅读更多关于这一步骤的信息:http://www.asp.net/learn/mvc/tutorial-05-cs.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接