共用方式為


在 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 也會直接指向特定檔案 (blog.cshtml)。 如果基於某些原因,部落格已移至伺服器上的另一個資料夾,或如果重新撰寫部落格以使用不同的頁面,則連結會錯誤。 第二組 URL 不會指向特定頁面,因此即使部落格實行或位置變更,URL 仍然有效。

在 ASP.NET Web Pages 中,因為 ASP.NET 使用路由,您可以建立更友善的 URL,如上述範例中的 URL。 路由會從 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傳遞至該頁面。 Otherwise
  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 Page 中如何運作提供一些額外的詳細資料。