在ASP.NET中實現簡單的URL重寫

來源:互聯網
上載者:User

    最近用ASP.NET寫一個小網站程式,需要實現URL重寫。在ASP.NET中實現URL重寫算是一個古老的話題了,在微軟的MSDN中也有文章專門討論這個問題,文章地址為:
http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx,在微軟的解決方案中,開發人員需要自己編程實現HTTP模組和HTTP處理常式,此外還要修改設定檔,雖然不複雜,但也要寫一些代碼。我是一個喜歡偷懶的程式員,而且對ASP.NET編程不很熟悉,網站又小,因此我想出了一個簡單方法來實現URL重寫。
    首先看看URL重寫的目的,URL重寫的最終目標就是把難懂的充滿"&?"符號的帶參數的URL地址改變成自然的易於人類理解的結構簡單的URL地址。可以認為所有能達到這種結果的手段就是URL重寫。
    比如一個頁面地址“http://server/customers.aspx?region=地區名稱” ,它顯示的是指定地區的客戶列表,使用者直接輸入 "http://server/customers/地區名稱"的樣式,則經過URL重寫,它轉換為 "http://server/customers.aspx?region=地區名稱",例如用戶端為 "http://server/customers/東北.aspx",伺服器端最終執行的是"customers.aspx?region=東北",URL重寫使得WEB應用程式的URL人性化,提高程式的使用者可用性。
    但符號"/"是一個特殊字元,可以解釋為作業系統目錄分隔字元,URL重寫時可能需要對此有所判斷,我不想判斷,於是沒有"/"符號,而採用其他的重寫方式,比如使用者輸入"http://server/東北客戶.aspx",則重寫為"customers.aspx?region=東北",這樣重寫方式簡單,程式判斷起來也容易。不需要編程實現HTTP模組,無需修改設定檔,實現了customers.aspx 後,只要在 Global.asax 中添加以下代碼

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    string name = base.Request.FilePath ;
    if( name != null )
    {
        int index = name.LastIndexOf('/');
        if( index >= 0 )
            name = name.Substring( index + 1 );
        index = name.LastIndexOf('\\');
        if( index >= 0 )
            name = name.Substring( index + 1 );
        index = name.LastIndexOf('.');
        if( index >= 0 )
            name = name.Substring( 0 , index );
        name = name.Trim() ;
        // 此處 name 就是請求地址的簡單名稱
        if( name.EndsWith("客戶"))
        {
            name = name.Substring( 0 , name.Length - 2 );
            base.Context.RewritePath( "customers.aspx?region=" + System.Web.HttpUtility.UrlEncode( name ) );
            // 若使用 Response.Redirect 則會導致客戶的IE地址欄輸入的地址突變
            //base.Context.RewritePath( "customers.aspx?region=" + name , true );
        }
    }
}

這種方法只使用了幾十行代碼就實現了簡單的URL重寫,無需實現各種介面,無需修改設定檔,實在是方便,我的懶惰的慾望得到了滿足。

不過這是一種簡單的URL重寫方法,只能處理簡單的問題,若需要實現複雜的URL重寫,則還是推薦大家看看微軟提出的URL重寫方案。

在此提供一個實現簡單URL重寫的ASP.NET示範程式下載(/Files/xdesigner/URLRewriteDemo.rar) 。這個示範程式需要注意,對於ASP.NET,若URL參數中包含中文則可能出現問題,需要修改web.config 中的 globalization 元素的 requestEncoding 屬性值為 "gb2312" ,但若使用URL重寫則不存在這種問題。

袁永福(http://www.xdesigner.cn) 2007-3-28

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.