以前在做asp的时候,要把 /default.asp?id=123映射成/default/123,需要借助IISRewriter这个组件,到了asp.net以后,可以用代码 写了,但是个人觉得很麻烦,要写一堆代码,还要修改web.config,现在好了:asp.net4.0中 asp.net mvc中的路由规则全部可以用于webform了
使用步骤:
1.Global.ascx.cs中先注册路由规则
02 using System.Web.Routing;
06 public class Global : System.Web.HttpApplication
08 void RegisterRouters(RouteCollection routes)
13 //第三个参数:该路由规则交给哪一个页面来处理
14 routes.MapPageRoute("my-route-name", "default/{id}", "~/default.aspx");
18 protected void Application_Start(object sender, EventArgs e)
20 RegisterRouters(RouteTable.Routes);
在根目录下弄个default.aspx来测试下:
02 ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
03 http://www.w3.org/1999/xhtml">
后端代码:
06 public partial class Default : System.Web.UI.Page
08 protected void Page_Load(object sender, EventArgs e)
12 string _id = Page.RouteData.Values["id"] as string;//接收路由参数
16 foreach (var item in Request.QueryString) //如果是用 /default/123?name=xxx之类的传过来的,测试一下能不能收到其它参数
18 _t += item + "=" + Request.QueryString[item.ToString()] + ",";
20 lblOther.Text = _t.Trim(',');
24 //看看能不能继续用以前的Request.Form来处理
26 foreach (var item in Request.Form)
28 _t += item + "=" + Request.Form[item.ToString()] + ",";
30 lblOther.Text = _t.Trim(',');
先看看传统的url参数方式还能不能用(结果证明:加了路由后,以前的方式仍然可运行)
再用路由规则访问试下,同时加了路由中未定义的url参数,看看能不能同时处理,结果再次证明,一切Ok,注意:如果这时又传了?id=xxx参数,仍然可以正常区分出来(见下图) 把路径换成大写试下,结果证明不区分大小写(这一点个人觉得比ror要好) 试下省略掉前面的default.aspx能不能正常默认交给default.aspx来处理,结果ok
试下提交的场景,结果证明,仍然可以用以前的Request.Form来处理,同时源代码查看下来,系统自动把action设置成了路由参数
最后我们还能玩点雷人 的把戏:比如利用路由,可以把/default/123 变成 /default.jsp /123,然后跑去跟客户说:我们的系统用了国际最主流的java,哈哈
作者:
菩提树下的杨过
出处:
http://yjmyzz.cnblogs.com
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-628715/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12639172/viewspace-628715/