2013-07-04 63 views
3

現在我有一個匹配路由,匹配特定的URL,如果它包含一個字

foreach(var subcat in Sports.Categories) 
{ 
routes.MapRoute("MultiRoute" + i, subcat+"/{title}", 
new { controller = "Routing", action = "Redirect", category = subcat }); 
} 

我有一些體育類地圖中的路線:棒球,足球,籃球等,但我也想匹配籃球籃球籃球,籃球,籃球等...

這意味着我必須允許subcat有一個通配符之前和之後,因爲BasketBall-Plays包含單詞籃球,我希望它在那裏重定向。

如何爲地圖路由做一個包含部分?

編輯:TLDR:我有一個名爲籃球的子籃球,但我想匹配每一個有籃球的網址。所以,籃球,播放/前10名的實際上應該打籃球/前10

嘗試:

foreach(var subcat in Sports.Categories) 
    { 
    routes.MapRoute("MultiRoute" + i, subcat+"/{title}", 
    new { controller = "Routing", action = "Redirect", category = subcat }), 
new{sub = ".*"+sub+".*" }); 
    } 
+0

重載之一是一個接受正則表達式的約束。 – Silvermind

+0

@Silvermind我知道約束超載,但我可以在子卡上執行正則表達式嗎?我以爲我只能用{{title}參數 – Spooks

+0

驗證它看起來你的路由有點。您能否展示一些示例URL以及他們必須調用哪些控制器 - >操作? – Silvermind

回答

4

如果我理解正確,下面應該工作,

var subCategories = new[] { "Soccer", "BasketBall", "Golf" }; 
foreach (var subcat in subCategories) 
{ 
    routes.MapRoute(subcat, "{subcat}/{title}", 
         new {controller = "Routing", action = "Redirect", category = subcat}, 
         new { subcat = @".*\b" + subcat + @"\b.*" }); 
} 

它將路線

  • Basketball/top-10
  • Basketball-plays /前10
  • 籃球戲劇/前10
  • 十大籃球/ sometitle

希望這會有所幫助。

相關問題