程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> System.Web.Routing入門及進階(上)

System.Web.Routing入門及進階(上)

編輯:關於ASP.NET

System.Web.Routing已經作為一個程序集包含在.net3.5sp1中發布了。雖然我們並沒有在3.5sp1中發現Asp.net Mvc的蹤跡,但是亦以感覺到它離我們不遠了。

System.Web.Routing用於在Asp.net的Web應用程序中進行URLRouting。

所謂UrlRouting就是將一個地址映射為另一個地址,比如我訪問/chsword/2008/08/27.html其實是訪問了/chsword/article.aspx?y=2008&m=08&d=27這個地址,URLRouting使我們的URL看起來非常漂亮。

本文將分2部分介紹UrlRouting的使用分別為入門篇與進階篇。

文章的前提:

1.安裝Visual Studio 2008 sp1或其它IDE的等同版本。

2.建立一個Asp.net Web Application(Asp.net Web應用程序)

3.引用System.Web.Routing程序集。

UrlRouting的實現原理

如果你不是追求理論的人,僅僅是務實主義,可以直接從准備工作讀起。

為了方便大家理解我繪制了一個UML圖,其中通過RouteTable的Routes這個屬性可以獲取一個RouteCollection的Singleton模式,雖然在其中並沒有判斷值不存在時才初始化的Singleton的標志性行為,但是它是在Application_Start事件中進行初始化的,並且直到應用程序進程終結,所以是Singleton模式的。

而通過以下方式將Route添加到RouteTable.Routes中

RouteTable.Routes.Add(new Route());

以上代碼僅為表示其流程,這個代碼是不能正確執行的,因為Route沒有提供無參構造函數。

Route初始化時則是利用RouteValueDictionary來加入默認值及規則到Route中

另外Route還有一個IRouteHandler的實現對象,IRouteHandler的實現對象提供了一個GetHttpHandler方法來獲取用於處理URL的IHttpHandler。

這麼說還是停留在抽象層次的,下面我們以一些簡單例子來帶你馭起UrlRouting。

准備工作

由於須要一個處理Url的IHttpHandler所以我們先定義一個實現了IHttpHandler接口的類。

就叫它MyPage,由於我們要與IRouteHandler交互,所以除了實現IHttpHandler的方法之外還要聲明一個RequestContext類型的屬性。

public class MyPage:IHttpHandler {
public RequestContext RequestContext { get; private set; }
public MyPage(RequestContext context)
{
this.RequestContext = context;
}
#region IHttpHandler 成員
public virtual void ProcessRequest(HttpContext context){}
public bool IsReusable {
get { return false; }
}
#endregion
}

這樣我們就擁有了一個自己的IHttpHandler。

下面我們實現一個IRouteHandler:

public class MyRouteHandler : IRouteHandler {
#region IRouteHandler 成員
public IHttpHandler GetHttpHandler(RequestContext requestContext) {
return new MyPage(requestContext);
}
#endregion
}

這裡實現了IRouteHandler的GetHttpHandler方法,使之返回剛才我們實現的MyPage。

這樣我們前期的2個工作就做完了,我們可以來實現UrlRouting了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved