2010-09-04 74 views
3

我開始將現有的ASP.NET Web Forms CMS移植到ASP.NET MVC,並希望從一開始就獲得路由權。asp.net mvc routing with optional starting參數

注意:具有完全相同的URL結構並不重要。

我認爲this answer已經接近我正在尋找的東西,但想要一些額外的輸入應該有人擁有它。

當前的URL結構調查是這樣的:??

內容=新聞/ CurrentNews/This_is_a_news_article
內容=公司/ About_Us /概述

等等等等

我想添加一個可選的語言參數並在MVC中保留一個類似的結構。因此,像:

新聞/ CurrentNews /這 - 是 - 一 - 新聞文章
EN /新聞/ CurrentNews /這 - 是 - 一 - 新聞文章

編輯/新聞/ CurrentNews /這 - 是 - 一 - 新聞文章
編輯/ EN /新聞/ CurrentNews /這 - 是 - 一 - 新聞文章

還是我更好地與反向?

新聞/ CurrentNews /這 - 是 - 一 - 新聞 - 文/編輯
EN /新聞/ CurrentNews /這 - 是 - 一 - 新聞 - 文/編輯

我覺得這種方式(在最後採取行動)爲我讀過的其他問題的每一個場景尋找路線。

另一點是,現有的URLs就像SEO和麪包屑生成那樣完成。即URL顯示當前的導航路徑。

我只能在URL中顯示當前頁面,並從數據庫分離地構建麪包屑。

像:

EN /這 - 是 - 一 - 新聞文章

與麪包屑

首頁>新聞中心>最新新聞>這是一個新聞文章

整體想法和解決方案?我應該從一個自定義路由類開始,以獲得最大的靈活性嗎?

回答

1

您必須確保某些路由規則不會意外重疊。例如,假設您將語言作爲第一個標籤,請確保不會有名稱爲「en」的新聞類別。我知道這是一個愚蠢的例子,但我認爲你會得到這張照片。確保你把最不準確的路由規則放在最後。

我個人構建這樣的:

[language]/[category]/[subcategory]/[itemtitle]/[itemid] 

爲什麼[的itemId]你可能會問?如果你有一個更大的網站,可能會發生這樣的情況,即你有兩篇新聞文章的名字完全相同。你的代碼可能「恰好」寫成只顯示返回的第一個newsitem,但它可能不是。一個ID總是唯一的,在SEO方面,添加ID實際上並不重要(至少在我的經驗中)。

您可以添加一個路線,其中省略了[語言],而是提供默認值。

此外,Scott Guthrie在前一段寫了一個不錯的blogpost,這絕對值得一讀,我認爲它仍然適用於MVC 3.它可能只是給你一些想法!

+0

感謝您的見解。最後的itemid肯定是有效的和重要的。 – 2010-09-07 01:35:29