在 ASP.NET Web Pages (Razor) 網站中建立可讀取的 URL

作者:Tom FitzMacken

本文說明 ASP.NET Web Pages (Razor) 網站的路由,以及如何讓您使用更容易閱讀且更適合 SEO 的 URL。

您將學到什麼:

  • ASP.NET 如何使用路由,讓您使用更容易閱讀且可搜尋的 URL。

教學課程中使用的軟體版本

  • ASP.NET Web Pages (Razor) 3

本教學課程也適用于 ASP.NET Web Pages 2。

關於路由

網站中頁面的 URL 可能會影響網站的運作方式。 「易記」的 URL 可讓您更輕鬆地使用網站。 它也有助於網站的搜尋引擎優化 (SEO) 。 ASP.NET 網站包含自動使用易記 URL 的能力。

ASP.NET 可讓您建立有意義的 URL 來描述使用者動作,而不只是指向伺服器上的檔案。 請考慮虛構部落格的這些 URL:

  • http://www.contoso.com/Blog/blog.cshtml?categories=hardware
  • http://www.contoso.com//Blog/blog.cshtml?startdate=2009-11-01&enddate=2009-11-30

將這些 URL 與下列 URL 進行比較:

  • http://www.contoso.com/Blog/categories/hardware/
  • http://www.contoso.com/Blog/2009/November

在第一組中,使用者必須知道部落格是使用 blog.cshtml 頁面顯示,然後必須建構取得正確類別或日期範圍的查詢字串。 第二組範例更容易理解和建立。

第一個範例的 URL 也會直接指向 部落格.cshtml () 的特定檔案。 如果基於某些原因,部落格已移至伺服器上的另一個資料夾,或部落格重寫為使用不同的頁面,則連結會錯誤。 第二組 URL 不會指向特定頁面,因此即使部落格實作或位置變更,URL 仍然有效。

在 ASP.NET Web Pages中,您可以建立類似上述範例中這類的方便 URL,因為 ASP.NET 使用路由。 路由會從 URL 建立邏輯對應至可滿足要求的網頁 (或頁面) 。 因為對應是邏輯 (非實體,所以路由會提供您定義網站 URL 的方式) 的絕佳彈性。

路由的運作方式

當 ASP.NET 處理要求時,它會讀取 URL 以判斷如何路由。 ASP.NET 嘗試將 URL 的個別區段與磁片上的檔案比對,從左至右。 如果有相符專案,URL 中剩餘的任何專案會以 路徑資訊的形式傳遞至頁面。

假設有人使用此 URL 提出要求:

http://www.contoso.com/a/b/c

搜尋如下所示:

  1. 是否有檔案具有 /a/b/c.cshtml的路徑和名稱? 如果是,請執行該頁面,並傳遞任何資訊給它。 否則...
  2. 是否有檔案具有 /a/b.cshtml的路徑和名稱? 如果是,請執行該頁面,並將值 c 傳遞至該頁面。 否則。。。
  3. 是否有檔案具有 /a.cshtml的路徑和名稱? 如果是,請執行該頁面,並將值 b/c 傳遞至該頁面。

如果搜尋找不到其指定資料夾中 .cshtml 檔案的完全相符專案,ASP.NET 會繼續尋找這些檔案:

  1. /a/b/c/default.cshtml (沒有路徑資訊) 。
  2. /a/b/c/index.cshtml (沒有路徑資訊) 。

注意

若要清楚,特定頁面的要求 (也就是包含 .cshtml 副檔名的要求,) 就像您預期一樣運作。 類似 http://www.contoso.com/a/b.cshtml 的要求會執行頁面 b.cshtml

在頁面內,您可以透過頁面 UrlData 的 屬性取得路徑資訊,也就是字典。 假設您有一個名為 ViewCustomers.cshtml 的 檔案,且您的網站會取得此要求:

http://mysite.com/myWebSite/ViewCustomers/1000

如上述規則所述,要求會移至您的頁面。 在頁面中,您可以使用如下所示的程式碼來取得並顯示路徑資訊 (,在此案例中為 「1000」) :

<!DOCTYPE html>
<html>
    <head>
        <title>URLData</title>
    </head>
    <body>
      Customer ID: @UrlData[0].ToString()
    </body>
</html>

注意

由於路由未涉及完整的檔案名,因此如果您有具有相同名稱但不同副檔名的頁面, (例如 MyPage.cshtmlMyPage.html) ,可能會有模棱兩可。 為了避免路由發生問題,最好確定您的網站中沒有只有其名稱不同的頁面。

其他資源

WebMatrix - URL、UrlData 和 SEO 路由。 Mike Brind 的此部落格文章提供路由在 ASP.NET Web Pages 運作方式的一些額外詳細資料。