mvc 做伪静态另外一个方法

上一篇文章介绍如何做伪静态如下:

    routes.MapRoute(//两个参数不带动作
            "TwoparameterNoAction",
            "{controller}/{CurrentID}/{ClassID}.html",
            new { controller = @"[a-zA-Z]", action = "Index", CurrentID = @"[\d]{0,3}", ClassID =UrlParameter.Optional }
            );

 

这样就能匹配:http://www.163.com/Home/1/2.html  但无法匹配 http://www.163.com/home/1.html 虽然ClassID是可选的 但还是无发匹配

这个时候很多同学都是重写多个路由来完成,其实不必如此,我们可以利用路由的通配符{*catchall} * 表示多出所有的段落都可以用catchall 来获取。

既然我们是做伪静态使URL个更加友好。我们完全可以这样做:

routes.MapRoute(//两个参数不带动作 多余的参数从catchall 获取
            "TwoparameterNoAction",
            "{controller}/{CurrentID}/{*catchall}",
            new { controller = @"[a-zA-Z]", action = "Index", CurrentID = @"[\d]{0,3}"}
            );

http://www.163.com/home/1.html  那CurrentID就等于int.Parse(controlerContext.RouteData.Values["CurrentID"].ToString().Replace(".html",""))
http://www.163.com/home/1/2.html  那CurrentID就等于1而classid 就等于catchall=2.html 我同样int.Parse(controlerContext.RouteData.Values["catchall"].ToString().Replace(".html",""))

呵呵 这样,到此大家就知道了这个.HTML 也被当参数来用了,哈哈 同样实现了“伪静态”,对于我现在所开发的中小型网站绰绰有余。

那有的同学就会每一个页面都要获取参数怎么办?很简单嘛,模型绑定下,在需要控制器的动作 传递模型就可以。这点 我就不细说了。

那再多的参数我们都不怕了 哈哈,1/2/3/4/5/6/7/8/9.html 都可以实现哦,但前提就是必须约定开发。

希望大牛路过的时候 提供更好的方法 ,希望能抛砖引玉!

posted on 2013-01-25 09:03  ~紫鱼~  阅读(3395)  评论(0编辑  收藏  举报