ASP.NET 路由

weixin_34377065發表於2009-04-19

ASP.NET 路由使您可以使用不必對映到網站中特定檔案的 URL。由於 URL 不必對映到檔案,所以可以在 Web 應用程式中使用 URL,這些 URL 是描述性的使用者操作,因此更易於被使用者理解。

在一個不使用路由的 ASP.NET 應用程式中,對 URL 的傳入請求通常對映到磁碟上的物理檔案,如 .aspx 檔案。在 ASP.NET 路由中,您可以定義 URL 模式,該模式包含在處理 URL 請求時使用的值的佔位符。在執行時,應用程式名稱後面的 URL 部分根據您所定義的 URL 模式分析為離散值。

ASP.NET 路由不同於其他 URL 重寫方案。URL 重寫通過在將請求傳送到網頁之前實際更改 URL 來處理傳入請求。此外,URL 重寫通常沒有相應的 API 來建立基於模式的 URL。在 URL 重寫中,如果更改了 URL 模式,則必須手動更新包含原始 URL 的所有超連結。

由於 ASP.NET 路由可以從 URL 提取值,所以處理傳入請求時不更改 URL。如果必須建立一個 URL,則將引數值傳遞到為您生成 URL 的方法中。若要更改 URL 模式,請在某位置更改該模式,您在應用程式中建立的基於該模式的所有連結將自動使用新模式。

定義的 URL 模式稱作“路由”。在路由中,您可以指定佔位符,用於對映到從 URL 請求中分析的值。您還可以指定用於匹配 URL 請求的常量值。

在路由中,您可以通過用大括號( { 和 })括住佔位符來定義佔位符(稱為“URL 引數”)。分析 URL 時將/ 字元解釋為分隔符。將路由定義中不是分隔符和不在大括號中的資訊視為一個常量值。將從兩個分隔符之間提取的值分配給佔位符。

您可以在分隔符之間定義多個佔位符,但必須用一個常量值分隔開。

ASP.NET 路由除錯

在Mix會議上,Scott Hanselman’s演示了一個簡單的route測試程式(route tester),這個工具會顯示當前位址列中請求地址裡存在的Route資料內容(頁面裡的Route Data)。因此你可以在位址列中輸入各種Urls來觀察它匹配了哪一個路徑。在頁面底部,顯示了你的程式中所有被定義的route列表。它可以讓你看到當前的URL匹配哪個你定義的route。 這個工具的用處在於,有時候你希望的匹配路徑卻被其他的路徑定義所代替。它可以向你展示出發生了這種情況。

routingtest

要使用這個工具,只要下載這個zip檔案,然後把dll檔案放到你的程式的Bin目錄裡,再在Global.asax.cs檔案的Appliation_Start函式裡新增一行程式碼(黑體字的)。

protected void Application_Start(object sender, EventArgs e)
{
  RegisterRoutes(RouteTable.Routes);
RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
}

它會使用DebugRouteHandler來更新那些你的應用中所有的route處理程式(IRouteHandler),這些route處理程式原本是為了處理程式中每個不同的route特別定義的。

具體參看:ASP.NET Routing Debugger

http://www.informit.com/content/images/9780672329982/samplepages/0672329980_CH02.pdf

相關文章