路由,匹配特定网址(如果包含单词)

时间:2013-07-04 14:11:28

标签: c# regex asp.net-mvc-3 routing asp.net-mvc-routing

现在我有一个匹配的地图路线

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

我有一些体育类别:棒球,足球,篮球等,但我也希望将篮球与篮球比赛,篮球比赛,前10名篮球等比赛......

这意味着我必须允许subcat在之前和之后都有一个通配符,因为BasketBall-Plays包含单词Basketball,我希望它重定向到那里。

如何为地图路由做一个包含部分?

编辑:TLDR :我有一个名为basketball的子命令,但我希望匹配每个包含篮球一词的网址。所以篮球比赛/前10名应该打篮球/前10名

尝试:

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

1 个答案:

答案 0 :(得分: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.*" });
}

它将路由

  • 篮球/顶10
  • 篮球扮演/顶10
  • 篮球比赛/前10名
  • 最-10-篮球/ sometitle

希望这会有所帮助。