在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
From:http://tw.wingwit.com/Article/program/net/201311/12223.html