在C#2.0时期,要把 /Farm.aspx?farmid=1映射成/farm/1,需要借助IISRewriter或者其它第三方组件,也可以自己用代码定义路由规则,要修改web.config,甚至要写正则表达式去匹配规则,总之是一件比较麻烦的事情。有了VS2010,asp.net4.0中asp.net mvc中的路由规则全部可以用于webform了,这个功能实现起来也变得非常容易。
在VS2010平台下,URL重写变得容易很多。
首先在Globle文件中自定义路由规则,如下:
void Application_Start(object sender, EventArgs e) { // Code that runs on application startup RegisterRoutes(RouteTable.Routes); }
/// <summary> /// 自定义路由规则 /// </summary> /// <param name="routes"></param> /// 参数含义: /// 第一个参数:路由名称 /// 第二个参数:路由规则 /// 第三个参数:该路由规则交给哪一个页面来处理 void RegisterRoutes(RouteCollection routes) { routes.MapPageRoute("farm-browse", "farms/{farmid}", "~/Farm.aspx"); }
然后在指定的处理页面中接收参数,即在Farm.aspx中处理,如下:
protected int FarmId { get { int id; int.TryParse(Page.RouteData.Values["farmid"].ToString(), out id); return id; } }
以上两步就完成URL重定向的功能。
ASPX页面中,直接使用路由规则即可,如下:
<ul> <% using (ASPNETDBEntities db = new ASPNETDBEntities()) { var farms = db.Farms.OrderByDescending(f => f.DateCreated).Take(10); if (farms != null && farms.Count() > 0) { foreach (var farm in farms) { %> <li><a href="../farms/<%= farm.FarmId %>"> <%= farm.FarmTitle %></a><br /> <%= farm.DateCreated.ToString("yyyy-MM-dd") %></li> <%} } } %> </ul>