路由,如果包含一个单词,则匹配一个特定的URL

Spo*_*oks 3 c# regex routing asp.net-mvc-routing asp.net-mvc-3

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

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

我有一些体育类别:棒球,足球,篮球等,但我也想将篮球与篮球比赛,篮球集锦,十大篮球等等进行匹配。

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

如何为地图路由创建包含部分?

编辑:TLDR:我有一个名为篮球的子猫,但我想匹配每个带有单词篮球的URL。所以篮球比赛/前10名应该真正打篮球/前10名

尝试过:

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

sha*_*kib 5

如果我正确理解,以下方法应该有效,

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.*" });
}
Run Code Online (Sandbox Code Playgroud)

它将路由

  • 篮球/前10名
  • 篮球比赛/前10名
  • 篮球比赛/前10名
  • 排名前10位的篮球/ sometitle

希望这可以帮助。