.Net MVC 中的 URL 重写 [英] URL Rewriting in .Net MVC
本文介绍了.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 并且我的对象中有 FriendlyUrl
和 parentId
属性.
最好的方法是什么?
解决方案
我看了一下 http://www.asp.net/learn/mvc/tutorial-23-cs.aspx 并且我让它工作了.比我想象的要简单...
我的路线:
public static void RegisterRoutes(RouteCollection routes){route.IgnoreRoute("{resource}.axd/{*pathInfo}");route.MapRoute("Pages3", "{url1}/{url2}/{url3}", MVC.Page.RedirectTo(), new { url1 = "", url2 = "", url3 = "" });route.MapRoute("Pages2", "{url1}/{url2}", MVC.Page.RedirectTo(), new { url1 = "", url2 = "", url3 = "" });route.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;返回视图(视图.索引);}
这是我呈现链接的方式(我的菜单示例):
查看全文