2012-08-13 35 views
1

我想編寫一個規則來映射一個URL,但這樣我沒有得到我想要的結果。我至今這條規則:在MVC應用程序中添加路由規則

routes.MapRoute(
      "Search", // Route name 
      "{controller}/{action}/{product}/{page}", // URL with parameters 
      new { controller = "Home", action = "Search", product = UrlParameter.Optional, page = UrlParameter.Optional } // Parameter defaults 
     ); 

使用這個我能做到到目前爲止這樣的結果:

localhost:8493/home/search/myproduct 
localhost:8493/home/search/myproduct/2 

,但我想這樣做:

因此,這將路線到home/search/myproduct

我已經嘗試過以下,但它沒有工作:

routes.MapRoute(
      "DirectSearch", // Route name 
      "{product}/{page}", // URL with parameters 
      new { controller = "Home", action = "Search", } // Parameter defaults 
     ); 

有沒有辦法做到這一點?

地址:

所以在這裏我添加了特定路由映射到另一個動作,但它不工作:

routes.MapRoute(
      "Tuna", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Tuna", id = UrlParameter.Optional } 
     ); 

回答

1

你接近我的想法。這應該工作;

routes.MapRoute(
      "Search", // Route name 
      "{product}/{page}", // URL with parameters 
      new { controller = "Home", action = "Search", product = UrlParameter.Optional, page = UrlParameter.Optional } // Parameter defaults 
     ); 

只要記住,該框架將頂部讀取數據路由至底部,並用它找到相匹配的第一個。因此,確保更具體的路線更一般的問題之前列出

編輯

Here's a link to a discussion on custom routing

+0

謝謝。我也有這條路線,但是它的底部非常的平坦。我不知道它從上到下讀取,但現在我做:-) – SherCoder 2012-08-13 17:59:20

+0

好吧,我只是注意到一個問題。所以現在如果我嘗試在同一個/不同的控制器中執行另一個操作,它將控制器名稱作爲「product」的值。你有什麼建議可以解決這個問題嗎?謝謝 – SherCoder 2012-08-13 18:17:59

+0

這是超特定路由映射的風險之一。您需要編寫特定路線以滿足特定需求。 – 2012-08-13 18:23:01

相關問題