色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

ASP.NET 4的Demo實(shí)踐:URL路由改進(jìn)支持

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

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

  在Web窗體中,通常情況下,我們都要把路由模式映射到一個實(shí)際的ASP.NET頁面。為此,我們需要創(chuàng)建一個路由處理類以便在請求路由URL時調(diào)用之,并且在一定意義上實(shí)現(xiàn)了把請求調(diào)度到適當(dāng)?shù)?a href=/itjie/ASPjishu/ target=_blank class=infotextkey>ASP.NET頁面。例如,為了把一個路由映射到一個物理文件,比如把Categories/CategoryName映射到ShowProductsByCategory.ASPx,我們需要如下三個步驟:

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

  (2)創(chuàng)建路由處理類,它負(fù)責(zé)解析網(wǎng)址,把所有路由參數(shù)存儲到一些目標(biāo)頁面可以訪問到的位置(如HttpContext.Items),并返回一個目標(biāo)頁面或處理請求路由的HTTP處理器的實(shí)例;

  (3)在目標(biāo)頁面中編寫代碼來獲取路由參數(shù),并使用他們生成頁面內(nèi)容。

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

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

  一ASP.NET路由技術(shù)概述

  ASP.NET路由能夠干凈地實(shí)現(xiàn)URL與網(wǎng)頁文件名之間的解耦,從而可用于創(chuàng)建干凈、簡潔且搜索引擎友好的網(wǎng)址。有關(guān)為什么應(yīng)該在Web應(yīng)用程序中使用ASP.NET路由的詳細(xì)討論,在此不作詳細(xì)討論,請參考其他有關(guān)文章。

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

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

  (1)根據(jù)需要解析網(wǎng)址,或許研究某些路由參數(shù),并以這些值為基礎(chǔ)作出決定。

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

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

  通常,這些路由處理程序類具有差不多相似的特征。你把路由參數(shù)存儲到HttpContext.Items集合中,然后創(chuàng)建并返回一個負(fù)責(zé)生成該網(wǎng)址對應(yīng)內(nèi)容的ASP.NET頁面的實(shí)例。盡管路由處理類具有相似特征,但是編寫這些類是一項冗長的任務(wù),因為每個新路由都需要一個新的處理程序類,而此類需要實(shí)現(xiàn)幾乎與前一個類同樣的任務(wù)。

  在ASP.NET 3.5 SP1中使用ASP.NET路由的另一種挑戰(zhàn)主要與負(fù)責(zé)生成最終內(nèi)容的ASP.NET頁面相關(guān)。此頁面必須從HttpContext.Items集合((或其它其他存儲它們的路由處理程序類)中讀出路由參數(shù)。此外,為一個超鏈接或Response.Redirect調(diào)用生成路由友好的URL(如Categories/CategoryName)的語法也有點(diǎn)冗長和混亂。

  在ASP.NET 4.0中,路由支持得到了增強(qiáng),包括一些新的路由相關(guān)的方法,從而使定義映射到實(shí)際ASP.NET頁面的路由規(guī)則更加簡單。在ASP.NET 4.0中,你不再需要創(chuàng)建自定義路由處理程序類作為中介,而只需要從Global.asax文件中的路由規(guī)則中直接引用ASP.NET頁面即可。當(dāng)從路由規(guī)則中指定一個ASP.NET頁面時,路由參數(shù)被自動存儲在一個新的RouteData集合中,此集合可以從ASP.NET頁面中通過Page.RouteData結(jié)構(gòu)進(jìn)行訪問。更重要的是,在.NET框架4.0中包括一個自定義參數(shù)控件,這樣一來,你可以使用聲明的方式從ASP.NET的數(shù)據(jù)源控件(如SqlDataSource和LinqDataSource等)中使用RouteData中的值,而且也提供了一些方法來生成路由友好的URL,以及重定向到路由友好的網(wǎng)址。

  本文將重點(diǎn)討論ASP.NETASP.NET 4.0中的路由系統(tǒng)改進(jìn)支持。本文提供的演示程序是一個Web窗體應(yīng)用程序,這是一個羅斯文商貿(mào)網(wǎng)站的前端。它使用了ASP.NET路由支持來創(chuàng)造簡潔且搜索引擎友好的網(wǎng)址。例如,/Categories/All將顯示所有類別,/Categories/Beverages將列出屬于飲料類的所有產(chǎn)品,而/Products/Chai將顯示有關(guān)產(chǎn)品Chai的細(xì)節(jié)信息。

  請注意,為了在ASP.NET 3.5 SP1中使用ASP.NET路由支持,你需要明確地在你的項目中添加對System.Web.Routing程序集的引用,并需要添加一些標(biāo)記到Web.config配置文件中。這些步驟在使用ASP.NET 4.0時不再需要,而且,在Global.asax文件中用于定義路由規(guī)則的語法更為短小、簡單和具有可讀性。

  本文后面的內(nèi)容將給出在ASP.NET 4.0中使用ASP.NET路由的詳細(xì)步驟描述。

  二、使用ASP.NET 4.0路由

  下面給出在ASP.NET 4.0中使用ASP.NET路由的詳細(xì)描述。

  0. 前提

  本文提供的演示程序使用了新添加到ASP.NET 4.0中的ASP.NET路由功能。如果你使用Visual Studio 2010或Visual Web Developer 2010(或更高版本),那么你正好具備了這一前提。

  1.在文件Global.asax中定義路由規(guī)則

  要使用ASP.NET路由系統(tǒng),你需要在應(yīng)用程序啟動時定義一個或多個路由。方法是,在你的項目中添加一個全局應(yīng)用程序類文件(Global.asax)。在這個文件中,我們將在Application_Start事件中注冊這些路由。

  定義于Global.asax文件中的路由指示什么樣的路由處理程序負(fù)責(zé)處理什么樣的URL模式。在MVC應(yīng)用程序中,一種流行的模式是Controller/Action/ID;這意味著針對/Products/View/Aniseed Syrup或Categories/Edit/Beverages的請求將由配置的路由處理程序來處理。在應(yīng)用程序中定義什么樣的路由方面,你可以擁有足夠的靈活性。例如,你可以定義模式的多個部分,定義缺少部分的默認(rèn)值,甚至還要定義針對某些輸入類型的限制部分。

  本文演示程序是一個簡單的數(shù)據(jù)驅(qū)動應(yīng)用程序,它使用了Northwind數(shù)據(jù)庫,并接受下列模式的URL:

  /Categories/All列出數(shù)據(jù)庫中所有產(chǎn)品類型;

  /Categories/CategoryName列出相應(yīng)于特定類型的產(chǎn)品信息;

   /Products/ProductName顯示特定產(chǎn)品的信息。

  因此,我在Global.asax文件的Application_Start事件處理程序中定義了三個路由,如以下代碼所示。(注:RouteTable對象和RouteCollection類位于System.Web.Routing命名空間。)

    在Application_Start方法中,我們調(diào)用了RegisterRoutes,并傳遞進(jìn)RouteCollection類型的參數(shù)RouteTable.Routes。接下來,在RegisterRoutes方法中,調(diào)用RouteCollection類的MapPageRoute方法,它定義了一個路由模式到ASP.NET頁面的路由映射。例如,在第一次調(diào)用MapPageRoute方法時,我們創(chuàng)建了一個命名為All Categories的路由模式它負(fù)責(zé)把路由模式Categories/All映射到ASP.NET頁面~/ AllCategories.ASPx。

  接下來的兩個MapPageRoute方法調(diào)用使用參數(shù)創(chuàng)建路由模式。其中,View Product路由把模式Products/{ProductName}映射到ASP.NET頁面~/ ViewProduct.ASPx。這里,{ProductName}是一個參數(shù),意味著任何Products/ProductName形式的請求都將被路由到~/ViewProduct.ASPx頁面。不久你就會看到,{ProductName}參數(shù)的值可以從頁面~/ViewProduct.ASPx中通過Page.RouteData參數(shù)加以訪問。

  2.創(chuàng)建處理請求的ASP.NET頁面

  使用ASP.NET 4.0,你不再需要創(chuàng)建一個自定義的路由處理程序類。當(dāng)你使用MapPageRoute方法時,這一切都會由底層庫為你自動完成。剩下的僅僅是,建立處理請求的ASP.NET頁面(AllCategories.ASPx,CategoryProducts.ASPx和ViewProduct.ASPx)。當(dāng)然,本文示例中的這三個網(wǎng)頁相當(dāng)簡單它們都使用數(shù)據(jù)源控件,并以編程方式綁定到通過路由參數(shù)獲取的Categories或者Products表格的數(shù)據(jù)庫結(jié)果。

void Application_Start(object sender, EventArgs e)
  {
  RegisterRoutes(RouteTable.Routes);
  }
  
void RegisterRoutes(RouteCollection routes)
  {
// Register a route for Categories/All
  routes.MapPageRoute(
"All Categories", //路由名
"Categories/All", //路由URL
"~/AllCategories.ASPx" //處理路由的網(wǎng)頁
  );
//處理Categories/{CategoryName}的路由
//更多信息,請參考http://forums.ASP.NET/p/1417546/3131024.ASPx
  routes.MapPageRoute(
"View Category", //路由名
"Categories/{*CategoryName}", //路由URL
"~/CategoryProducts.ASPx" //處理路由的網(wǎng)頁
  );
// Register a route for Products/{ProductName}
  routes.MapPageRoute(
"View Product", //路由名
"Products/{ProductName}", //路由URL
"~/ViewProduct.ASPx" //處理路由的網(wǎng)頁
  );
  }

NET技術(shù)ASP.NET 4的Demo實(shí)踐:URL路由改進(jìn)支持,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 通山县| 博爱县| 怀柔区| 方山县| 高清| 密山市| 广丰县| 井研县| 民乐县| 汽车| 吉木乃县| 藁城市| 嘉义县| 平原县| 玉树县| 凤山县| 通榆县| 阿勒泰市| 通江县| 乌审旗| 五原县| 历史| 米泉市| 五台县| 舟山市| 敖汉旗| 柞水县| 临朐县| 来凤县| 定南县| 定兴县| 汕头市| 靖西县| 泌阳县| 依兰县| 十堰市| 亚东县| 黑河市| 永丰县| 邹城市| 墨竹工卡县|