Welcome 微信登录

首页 / 网页编程 / ASP.NET / System.Web.Routing入门及进阶(下)

System.Web.Routing入门及进阶(下)2010-05-20 cnblogs 重典上面介绍的是最简单的一种定义方式。当然我们可以建立更复杂的规则。其中就包括设定规则的默认值以及设定规则的正则表达式。

UrlRouting高级应用

预计效果:

当我访问/a/b.aspx时就会转到Default.aspx?category=a&action=b在页面上显示

category:a

action:b

亦如果我访问/chsword/xxxx.aspx就会转到Default.aspx?category=chsword&action=xxxx就会显示

category:chsword

action:xxxx

如果访问/chsword/就会转到 Default.aspx?category=chsword&action=index就会显示

category:chsword

action:index

首先我建立一个Route

routes.Add(
"Default",
new Route("{category}/{action}.aspx",
new RouteValueDictionary(
new
{
file = "Default",
category = "home",
action = "index"
}), new MyRouteHandler()

);
当然IHttpHandler的处理方式也要有所改变

为了方便查看我使用了下方法:

context.Server.Execute(string.Format("/{0}.aspx?category={1}&action={2}",
RequestContext.RouteData.Values.ContainsKey("file")
?RequestContext.RouteData.Values["file"].ToString()
:"default",
RequestContext.RouteData.Values.ContainsKey("category")
?RequestContext.RouteData.Values["category"].ToString()
:"",
RequestContext.RouteData.Values.ContainsKey("action")
?RequestContext.RouteData.Values["action"].ToString()
:"")
);

即/a/b.aspx是映射到Default.aspx?category=a&action=b

在Default.aspx中写如下代码:

category:<%=Request.Params["category"]%><br/>

action:<%=Request.Params["action"]%>

以显示传入的参数。

如果在IIS中设置Index.aspx时就算输入/a/也会访问到/a/index.aspx,即默认的会按RouteValueDictionary中设置的值自动补全