ASP.NET WebForm URL rewrite in VS2010

来源:岁月联盟 编辑:exp 时间:2011-09-28

在C#2.0时期,要把 /Farm.aspx?farmid=1映射成/farm/1,需要借助IISRewriter或者其它第三方组件,也可以自己用代码定义路由规则,要修改web.config,甚至要写正则表达式去匹配规则,总之是一件比较麻烦的事情。有了VS2010,asp.net4.0中asp.net mvc中的路由规则全部可以用于webform了,这个功能实现起来也变得非常容易。

在VS2010平台下,URL重写变得容易很多。

首先在Globle文件中自定义路由规则,如下:

view plain
void Application_Start(object sender, EventArgs e) 

    // Code that runs on application startup 
    RegisterRoutes(RouteTable.Routes); 

view plain
/// <summary> 
/// 自定义路由规则 
/// </summary> 
/// <param name="routes"></param> 
/// 参数含义: 
/// 第一个参数:路由名称 
/// 第二个参数:路由规则 
/// 第三个参数:该路由规则交给哪一个页面来处理        
void RegisterRoutes(RouteCollection routes) 

    routes.MapPageRoute("farm-browse", "farms/{farmid}", "~/Farm.aspx"); 

然后在指定的处理页面中接收参数,即在Farm.aspx中处理,如下:

view plain
protected int FarmId 

    get 
    { 
        int id; 
 
        int.TryParse(Page.RouteData.Values["farmid"].ToString(), out id); 
 
        return id; 
    } 

以上两步就完成URL重定向的功能。

ASPX页面中,直接使用路由规则即可,如下:

view plain
<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="<strong>..</strong>/farms/<%= farm.FarmId %>"> 
        <%= farm.FarmTitle %></a><br /> 
        <%= farm.DateCreated.ToString("yyyy-MM-dd") %></li> 
    <%} 
           } 
       } %> 
</ul> 

作者“Keep It Short And Simple”