2010-01-20 100 views
3

我正在開發一個具有模塊化結構的網站。 網址的每個部分都會顯示一個內容項目。 例如url:www.mysite.com/blogs/programming/2010/01/asp.net mvc動態/相對路由

根項目是'area'類型的'blogs'。它有一個'博客'類型的子項目'編程'。

現在有「2010/01」留下的網址。 最後有效(路由)項目 '編程' 是一個博客,所以我需要映射 '2010/01' 行動

BlogController.Date(INT blogid,年整型,詮釋?月,詮釋?天)

每個控制器來自一個模塊(單獨的DLL),其中註冊一些項目類型(博客註冊類型的「博客」(路由)和「後」(不可路由)。「博客」可以有型「後」的孩子)。 當檢測到url的上一個有效(可路由)項時,邏輯知道要查找哪個組件和控制器。現在我需要一種方法來使用正確的參數調用正確的操作。

類型「博客」的項目部分航線

 
{year}/ 
{year}/{month} 
{year}/{month}/{day} 
feed/ 
category/{category-name}/ 
tag/{tag-name}/ 
search/{*phrase} 
{*post-name} 

任何建議這將是一個簡單的方式做路由?

回答

1

爲了解決這個動作參數簽名的問題,我個人會創建一個新的Model類「BlogModel」,且僅作爲您的單一參數。這樣,你將擁有一致的動作參數簽名。但是,這需要更多工作,因爲您需要創建自定義ModelBinder對象「BlogModelBinder」並將其註冊到ModelBinderFactory(或MVC3 DependencyResolver中)。在「BlogModelBinder」中,您只需查找RouteData的參數和值,並將其綁定到「BlogModel」中的相應字段。

從我個人的經驗,我不認爲有一個簡單的方法來註冊你的路由:你仍然要路線網址分別註冊到一個具體的行動。除非有人有效地註冊路線網址,否則在知道我們都必須用管道代碼弄髒我們的手時,您可以感到安慰。