国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

System.Web.Routing入門及進階

2024-07-10 13:24:31
字體:
來源:轉載
供稿:網友

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模式的。

System.Web.Routing入門及進階


而通過以下方式將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了。
實現第一個UrlRouting
其實UrlRouting在定義完上兩個規則后就很簡單了。
在Golbal.asax(沒有可以新建一個)的Application_Start事件中寫如下代碼

復制代碼 代碼如下:


protected void Application_Start(object sender, EventArgs e) {
RegisterRoutes(RouteTable.Routes);
}
public static void RegisterRoutes(RouteCollection routes) {
routes.Add(new Route("{page}.aspx",new MyRouteHandler()));
}


這樣我們就定義了第一個UrlRouting規則就是對xxxx.aspx這類的Url進行Routing。
但是我們僅僅是定義了處理了什么樣的Url,卻沒定義如何處理。
我們應該在剛剛定義的MyPage的ProcessRequest方法中定義如何處理。
我們將ProcessRequest方法實現如下:

復制代碼 代碼如下:


public virtual void ProcessRequest(HttpContext context){
context.Server.Execute( RequestContext.RouteData.Values["page"].ToString().Replace("_","http://m.survivalescaperooms.com/")+".aspx"
);
}


很顯然這里的RequestContext.RouteData.Values["page"]就是取到剛才的規則{page}.aspx中的page的值即,如果我訪問index.aspx則RequestContext.RouteData.Values["page"]就是index。
我這里的定義是將”_”替換為”/”所以就是將list_index.aspx這樣的URL轉到list/index.aspx這樣的網頁上。
我們建立一些測試用的網頁如下圖所示:

System.Web.Routing入門及進階


在這些網頁里隨意寫些可以分辨網頁的文字。
則訪問list_chsword.aspx時自動Routing到了list/chsword.aspx上了。
總結一下UrlRouting與以下有關:
1. Application_Start中定義的規則
2. 自己實現的IHttpHandler類

這樣您對于UrlRouting就算是入門了,下一篇我們將來講一些進階設置。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 讷河市| 宣城市| 永修县| 莆田市| 富锦市| 昭觉县| 启东市| 房产| 灌阳县| 姜堰市| 砀山县| 红安县| 兖州市| 永安市| 五大连池市| 三穗县| 饶阳县| 呈贡县| 陇川县| 南昌市| 合江县| 奎屯市| 郓城县| 呼图壁县| 衡南县| 长沙县| 托里县| 博爱县| 丁青县| 东兴市| 博白县| 随州市| 明水县| 靖州| 蒙自县| 闽侯县| 庆安县| 庆安县| 永和县| 灵石县| 老河口市|