程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET 4的Demo實踐 - URL路由改進支持

ASP.NET 4的Demo實踐 - URL路由改進支持

編輯:關於ASP.NET

從.NET框架3.5 SP1開始,微軟推出了ASP.NET路由支持,從而實現了特定資源的URL與其對應的Web服 務器上的物理文件之間的徹底解耦。借助於ASP.NET路由支持,開發人員可以定義一組路由規則,從而實 現把路由模式映射到一個生成相應內容的類。例如,你可以把URL“Categories/CategoryName”映射到一 個類,該類接收CategoryName而最終生成對應於此種類的產品信息顯示於一個網格中的一組HTML標記。有 了這樣的映射,用戶便可以通過訪問www.yoursite.com/Categories/Beverages來查看飲料種類對應的所 有產品信息。

在.NET 3.5 SP1中,ASP.NET路由主要是為ASP.NET MVC應用而設計的,雖然在非ASP.NET MVC框架支持 的Web窗體應用程序中也有可能實現ASP.NET路由支持。然而,在Web窗體應用程序中實現ASP.NET路由會涉 及大量額外的工作。

在Web窗體中,通常情況下,我們都要把路由模式映射到一個實際的ASP.NET頁面。為此,我們需要創 建一個路由處理類以便在請求路由URL時調用之,並且在一定意義上實現了把請求調度到適當的ASP.NET頁 面。例如,為了把一個路由映射到一個物理文件,比如把 Categories/CategoryName映射到 ShowProductsByCategory.aspx,我們需要如下三個步驟:

(1)在Global.asax文件中定義映射,用於把路由模式映射到一個路由處理類;

(2)創建路由處理類,它負責解析網址,把所有路由參數存儲到一些目標頁面可以訪問到的位置(如 HttpContext.Items),並返回一個目標頁面或處理請求路由的HTTP處理器的實例;

(3)在目標頁面中編寫代碼來獲取路由參數,並使用他們生成頁面內容。

且不說花費了多大的代價僅僅讀取前面的語句(更不用擔編寫之),你完全能夠想象到—在Web窗體應用 程序中執行ASP.NET路由不一定是開發人員最直接的任務。

值得慶幸的是,ASP.NET 4.0通過添加一組類和助理方法極大地簡化了ASP.NET路由在Web窗體應用程序 中的使用。使用ASP.NET 4.0,你會更容易地定義路由規則,而不再需要創建一個自定義路由處理類。本 文將詳細探討這方面的改進支持。

一、ASP.NET路由技術概述

ASP.NET路由能夠干淨地實現URL與網頁文件名之間的解耦,從而可用於創建干淨、簡潔且搜索引擎友 好的網址。有關為什麼應該在Web應用程序中使用ASP.NET路由的詳細討論,在此不作詳細討論,請參考其 他有關文章。

概括地說,ASP.NET路由允許開發人員定義路由規則,從而實現把一個路由模式(如 Categories/CategoryName)映射到一個處理請求的類。這些路由規則在應用程序啟動時就已經定義在文件 Global.asax中的Application_Start事件處理程序中。

在Web窗體應用程序中,我們可能已經擁有了產生我們感興趣內容的ASP.NET網頁,我們只需要通過路 由規則把路由模式映射到這些ASP.NET頁面 —通過把任何路由參數(例如CategoryName)映射到該ASP.NET 頁面來實現。當在ASP.NET 3.5 SP1中使用ASP.NET路由時,沒有方法直接把路由模式映射到ASP.NET頁。 相反,我們必須創建一個路由處理類,它負責傳遞有關傳入請求的信息,並且必須返回一個HTTP處理程序 來處理此請求。通常,在Web窗體應用程序中一個路由處理類執行以下步驟:

(1)根據需要解析網址,或許研究某些路由參數,並以這些值為基礎作出決定。

(2)從需要被傳遞到ASP.NET頁面或HTTP處理程序(它們將處理這一請求)的URL加載任何路由參數。總之 ,我們要確保ASP.NET頁面會生成實際內容,因為此請求知道所有路由參數(如CategoryName)的值。一個 傳達這樣的信息的辦法是,把它們放在 HttpContext.Items集合中—此集合擔當存儲特定長度的請求信息 的數據存儲信息庫的作用。

(3)返回執行上述處理的ASP.NET頁面或HTTP處理程序的實例。

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