在NET 之前我们为了做出搜索引擎友好的对用户也友好的url都是需要自己实现Url重写现在不需要了
NET 为我们做这一切UrlRouting之所以称之为Routing
是因为它不但实现了Url重写还可以通过参数得到重写后的Url在页面上使用
Url Routing 的通常用法
UrlRouting在AspNET MVC项目中被广泛使用在MVC中很好用所以移植到了webform中
我们先看下在webform中的使用方式
假定一个使用场景我们需要做博客每日文章的页面我们希望的url地址是
/archive////defaultaspx
这个地址将被映射到~/postsaspx文件上
要使用UrlRouting需要将UrlRouting的规则注册到RouteTable中如下Global文件中注册Routing规则的代码
public static void RegisterRoutes(RouteCollection routes)
{ routesIgnore({resource}axd/{*pathInfo});
routesMapPageRoute(blogs
//给这个UrlRouting规则起一个名字
archive/{year}/{month}/{date}/defaultaspx
//希望的友好Url地址格式 ~/blogsaspx
//映射到的aspx页面路径 false //是否需要检查用户权限
new RouteValueDictionary{
{
year DateTimeNowYear } { month DateTimeNowMonth } {date DateTimeNowDate}
}
//参数的默认值
new RouteValueDictionary {
{year@(|)\d{}} {month@\d{}} {date@\d{}}
} //参数的规则我们在这里限制url中的年月日是我们想要的数据格式 ); }
void Application_Start(object sender EventArgs e) {
//在Application_Start时注册的Routing规则 RegisterRoutes(RouteTableRoutes); }
在页面中使用UrlRouting参数值
) 在后台代码中使用Route的值
protected void Page_Load(object sender EventArgs e) {
string year = (string)RouteDataValues[year];
string month = (string)RouteDataValues[month];
string date = (string)RouteDataValues[date];
}
) 在页面上使用
<asp:Literal ID=literalYear runat=server Text=<%$RouteValue:year %>></asp:Literal>
<asp:Literal ID=literal runat=server Text=<%$RouteValue:month %>></asp:Literal>
<asp:Literal ID=literal runat=server Text=<%$RouteValue:date %>></asp:Literal>
)在DataSource中使用RouteParameter
<asp:SqlDataSource ID=SqlDataSource runat=server ConnectionString=<%$ ConnectionStrings:TestDb %>
SelectCommand=SELECT BlogIDBlogTitle FROM Blogs Where Category = @category> <SelectParameters>
<asp:RouteParameter Name=category RouteKey=category /> </SelectParameters> </asp:SqlDataSource>
) 在页面上显示RouteUrl
<a <%=GetRouteUrl(blogsnew {year=month=date=}) %>>年月日的博客</a>
UrlRouting和UrlRewrite的区别
UrlRouting相对于Url重写是一个比较新的事物UrlRouting的长处是可以做双向转换既可以做url重写
还可以根据一些参数获得重写后的Url地址
但是它也有自己的不足之处比如说如果你想连域名一起重写比如博客地址这样的重写UrlRouting就做不到了只能用UrlRewrite