2013-07-04 62 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

希望这会有所帮助。

相关问题