Asp.Net4.0/VS2010新变化(3):webform中也可以直接url路由

以前在做asp的时候,要把 /default.asp?id=123映射成/default/123,需要借助IISRewriter这个组件,到了asp.net以后,可以用代码 写了,但是个人觉得很麻烦,要写一堆代码,还要修改web.config,现在好了:asp.net4.0中 asp.net mvc中的路由规则全部可以用于webform了

 

使用步骤:

1.Global.ascx.cs中先注册路由规则

01using System;
02using System.Web.Routing;
03 
04namespace WebApp
05{
06    public class Global : System.Web.HttpApplication
07    {
08        void RegisterRouters(RouteCollection routes)
09        {
10            //参数含义:
11            //第一个参数:路由名称--随便自己起
12            //第二个参数:路由规则
13            //第三个参数:该路由规则交给哪一个页面来处理
14            routes.MapPageRoute("my-route-name", "default/{id}", "~/default.aspx");
15            //...当然,您还可以添加更多路由规则
16        }
17 
18        protected void Application_Start(object sender, EventArgs e)
19        {
20            RegisterRouters(RouteTable.Routes);
21        }       
22    }
23}

在根目录下弄个default.aspx来测试下:

01
02ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
03http://www.w3.org/1999/xhtml">
04
05    
06
07
08    
09    待提交的Id:
10    接收到的Id:
11    其它常规参数:
12    
13    
14
15

后端代码:

01using System;
02using System.Web.UI;
03 
04namespace WebApp
05{
06    public partial class Default : System.Web.UI.Page
07    {
08        protected void Page_Load(object sender, EventArgs e)
09        {
10            if (!IsPostBack)
11            {
12                string _id = Page.RouteData.Values["id"] as string;//接收路由参数
13                lblId.Text = _id;
14 
15                string _t = "";
16                foreach (var item in Request.QueryString) //如果是用 /default/123?name=xxx之类的传过来的,测试一下能不能收到其它参数
17                {
18                    _t += item + "=" + Request.QueryString[item.ToString()] + ",";
19                }
20                lblOther.Text = _t.Trim(',');
21            }
22            else //提交以后的测试
23            {
24                //看看能不能继续用以前的Request.Form来处理
25                string _t = "";
26                foreach (var item in Request.Form)
27                {
28                    _t += item + "=" + Request.Form[item.ToString()] + ",";
29                }
30                lblOther.Text = _t.Trim(',');
31            }
32        }
33    }
34}

 先看看传统的url参数方式还能不能用(结果证明:加了路由后,以前的方式仍然可运行)

2010030514584443.jpg

再用路由规则访问试下,同时加了路由中未定义的url参数,看看能不能同时处理,结果再次证明,一切Ok,注意:如果这时又传了?id=xxx参数,仍然可以正常区分出来(见下图)
2010030514591729.jpg
把路径换成大写试下,结果证明不区分大小写(这一点个人觉得比ror要好)
2010030515004812.jpg
试下省略掉前面的default.aspx能不能正常默认交给default.aspx来处理,结果ok

2010030515013681.jpg

试下提交的场景,结果证明,仍然可以用以前的Request.Form来处理,同时源代码查看下来,系统自动把action设置成了路由参数2010030515022948.jpg

 

最后我们还能玩点雷人的把戏:比如利用路由,可以把/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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值