在 ASP.NET Web Pages (Razor) 網站中建立可讀取的 URL
本文說明 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
搜尋如下所示:
- 是否有檔案具有 /a/b/c.cshtml的路徑和名稱? 如果是,請執行該頁面,並傳遞任何資訊給它。 否則...
- 是否有檔案具有 /a/b.cshtml的路徑和名稱? 如果是,請執行該頁面,並將值
c
傳遞至該頁面。 否則。。。 - 是否有檔案具有 /a.cshtml的路徑和名稱? 如果是,請執行該頁面,並將值
b/c
傳遞至該頁面。
如果搜尋找不到其指定資料夾中 .cshtml 檔案的完全相符專案,ASP.NET 會繼續尋找這些檔案:
- /a/b/c/default.cshtml (沒有路徑資訊) 。
- /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.cshtml 和 MyPage.html) ,可能會有模棱兩可。 為了避免路由發生問題,最好確定您的網站中沒有只有其名稱不同的頁面。
其他資源
WebMatrix - URL、UrlData 和 SEO 路由。 Mike Brind 的此部落格文章提供路由在 ASP.NET Web Pages 運作方式的一些額外詳細資料。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應