.Net MVC中的URL重写

我想知道在MVC中处理URL的最佳方法是什么。 例如,在我的应用程序中,我有一个PageController可以链接到/website/Page/Index/3/website/Page/home 。 菜单是使用Html.ActionLink()和T4MVC动态构建的,基于传入的URL,因此我没有任何硬编码。

现在我想要做的是将我的url和链接指向更友好的SEO,例如/website/our-company/它还可以有像/website/our-company/location//website/our-company/employees/ 。 你明白了。

我的所有页面都保存到BD,我的对象中有FriendlyUrlparentId属性。

这样做的最佳方法是什么?

我看了一下http://www.asp.net/learn/mvc/tutorial-23-cs.aspx ,我开始工作了。 比我想象的更简单……

我的路线:

 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute("Pages3", "{url1}/{url2}/{url3}", MVC.Page.RedirectTo(), new { url1 = "", url2 = "", url3 = "" }); routes.MapRoute("Pages2", "{url1}/{url2}", MVC.Page.RedirectTo(), new { url1 = "", url2 = "", url3 = "" }); routes.MapRoute("Pages1", "{url1}", MVC.Page.RedirectTo(), new { url1 = "", url2 = "", url3 = "" }); } 

而现在我的控制器:

 public virtual ActionResult RedirectTo(string url1, string url2, string url3) { if (string.IsNullOrEmpty(url1)) return Home(); var pageModel = new PageModel(); pageModel.CurrentPage = _pageRepo.GetByUrl(url1, url2, url3); BuildMenusAndBreadCrumb(pageModel); ViewData.Model = pageModel; return View(Views.Index); } 

以下是我渲染链接的方式(我的菜单示例):

 

完美适合我的需求! 如果您有任何问题或意见,请不要害羞! 我不确定这是最好的方法,但我很满意!

请注意,路由顺序很重要,如果您没有设置默认值并且在url2 =某个页面(site / section / page),那么您的所有链接都将指向site / newsection?url2 = page took我有一段时间弄清楚为什么url2 param在那里,但现在它没事!