我想達到一些非常類似於this question,有一些增強。如何使用ASP.NET路由路由樹形結構的URL?
有一個ASP.NET MVC Web應用程序。
我有一個實體樹。
例如,一個Page
類具有名爲Children的屬性,類型爲IList<Page>
。 (Page
類的一個實例對應於數據庫中的一行。)
請注意,網站的所有者可以隨時添加新頁面或刪除現有頁面,並且URL也應反映這些更改。
我想爲數據庫中的每個Page
分配一個唯一的URL。
我用一個名爲PageController
的控制器處理Page
對象。
網址示例:
http://mysite.com/Page1/
http://mysite.com/Page1/SubPage/
http://mysite.com/Page/ChildPage/GrandChildPage/
你得到的圖片。
因此,我希望每一個Page
對象都有自己的URL,它的父母的URL和自己的名字相同。
除此之外,我還希望能夠將單個Page
映射到/
(根)URL。
我想應用這些規則:
- 如果URL可以與任何其他途徑進行處理,或文件在指定的URL文件系統的存在,讓默認的URL映射發生
- 如果URL可以通過虛擬路徑提供來處理,讓這種處理它
- 如果沒有,對方的URL映射到
PageController
類
我也發現this question和also this one和this one,但他們沒有太大的幫助,因爲他們沒有提供關於我的前兩點的解釋。
我看到以下可能soutions:
- 地圖的路線爲每個頁面invidually。
這需要我在應用程序啓動時遍歷整個樹,並將完全匹配路線添加到路由表的末尾。 - 我可以添加一條路線
{*path}
並編寫一個處理它的自定義IRouteHandler
,但是我看不到如何處理前兩條規則,因爲此處理程序將處理所有內容。
到目前爲止,第一個解決方案似乎是正確的,因爲它也是最簡單的。但是,即使在這種情況下,我也不確定我怎麼能讓PageController
來處理這些請求。
我真的很感激你對此的看法。
預先感謝您!
編輯: 我現在有時間檢查我收到的每個答案的每個方面。我接受了Neal的回答,因爲他是提供有關事情如何運作的最佳解釋的人。我也提出了所有其他答案,因爲它們提供了很好的想法。
爲什麼以及如何添加現有文件的路線?另外,我將如何構建樹的路線並將其引導至相應的控制器? – Venemo 2010-05-31 17:03:01
你不需要;默認情況下,路由系統將檢查現有文件,並傾向於嘗試查找匹配的控制器和操作。 – Paul 2010-06-05 19:44:52
@保羅 - 謝謝。這是否也適用於由虛擬路徑提供者提供的文件? – Venemo 2010-06-08 18:42:46