2010-01-27 184 views
1

我期待生成一個MVC網站,該網站使用路由完全控制了網址結構。mvc.net動態網址

 routes.MapRoute(
      "BlogView",              // Route name 
      "view/{blogurl}",             // URL with parameters 
      new { controller = "view", action = "view", productLink = ""} // Parameter defaults 
     ); 

     routes.MapRoute(
      "ProductGrid",              // Route name 
      "category/{category}",             // URL with parameters 
      new { controller = "category", action = "Index", category = "" } // Parameter defaults 
     ); 

我現在都有以下網址;

www.myblog.com/view/first-post

www.myblog.com/view/another-post

www.myblog.com/category/code

www.myblog .com/category/example

前兩個網址與詳細視圖相關,後兩個網址與類別視圖相關。

我有一個具有以下結構的數據庫;我確保url(chrUrl)是一個唯一的鍵。 URL(idurl(INT), chrURL, chrAction, chrController )

我的計劃是,它可以查找改寫路由查找表,以便follwoing網址重定向至正確的觀點和頁面網站;

www.myblog.com/first-post

www.myblog.com/another-post

www.myblog.com/code

www.myblog.com/example

這可能嗎?除了性能外,這是否有問題,以及我如何處理這個問題?

回答

1

由於您沒有任何東西來區分視圖和類別項目,我會考慮使用默認控制器來檢查id是否在類別表中,並將控制權傳遞給View或Category控制器。

routes.MapRoute(
      "Root", // Route name 
      "/{id}", // URL with parameters 
      new { controller = "default", action = "redirect"} // Parameter defaults 
     ); 

但是,如果你能在你的類別的URL「/類別/」生活,那將是在後端更優雅的解決方案。

1

首先,我會提出一個你很滿意的URL方案。 (似乎你已經有一個)

然後我會使用一個ControllerFactory負責實例化和 在右側控制器上運行正確的操作。這與您在路由表中定義的任何路由無關 - 事實上,由於您希望您的網址爲「數據庫驅動」,因此它不會影響您的網址。您可以從您的Global.asax文件調用控制器工廠:

protected void Application_Start() 
{ 
    RegisterRoutes(RouteTable.Routes); 
    ControllerBuilder.Current.SetControllerFactory(new Controllers.ControllerFactory()); 
} 

然後在你的ControllerFactory的GetControllerType方法,您檢查與

RequestContext.RouteData.Values.ContainsKey("keyname") 

URL來解決URL方案的用戶呈現,並根據此數據庫進行數據庫查詢。

如果你想更進一步,你的數據庫也可以包含對控制器的引用來實例化,但這對你的情況是一種矯枉過正。作爲一個快速註釋,我們在一個解決方案中使用它,在這個解決方案中,爲非開發人員提供創建模板而不涉及開發的能力非常重要 - 數據庫持有的url方案,控制器和視圖在該控制器上呈現。如果你想讓事情更優雅,創建一個你的控制器繼承的BaseController,並在那裏設置ViewData中的東西,比如你的SEO標籤(MetaDescription,Title等) - 看看這些來自你的數據庫。

+0

這對2張桌子來說可能有點過分,但是當你不知道最終會用到多少桌子時,這聽起來像是一種合理的方式。無論你走到哪裏,我仍然會擔心失去網站的hackability部分以及只有單一路徑的唯一性問題。 – 2010-01-27 22:24:28