以前在做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来测试下:
| 01 | <%@
Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="WebApp.Default" EnableViewState="false" %> |
| 02 | 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博客 ” ,链接:https://blog.itpub.net/12639172/viewspace-628715/
,如需转载,请注明出处,否则将追究法律责任。