C# ASP.NET MVC路由匹配。

C# ASP.NET MVC路由匹配。,c#,.net,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-routing,C#,.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc Routing,在ASP.NET MVC路由(不是web API)中,如何匹配路由开头的整数而不是之后的整数 例如,我看到一些例子提到如何匹配/website/Product/{id}——这里用id参数创建了一个ProductController,并在id参数上指定了约束 然而,我正在尝试匹配一条看起来像这样的路线- /网站/{顶级id}/产品/{id} 顶级id可以是任何整数。您有什么想法吗?您可以添加这样一条路线 routes.MapRoute("TopLevelProduct", "{topLevelId

在ASP.NET MVC路由(不是web API)中,如何匹配路由开头的整数而不是之后的整数

例如,我看到一些例子提到如何匹配/website/Product/{id}——这里用id参数创建了一个ProductController,并在id参数上指定了约束

然而,我正在尝试匹配一条看起来像这样的路线- /网站/{顶级id}/产品/{id}


顶级id可以是任何整数。您有什么想法吗?

您可以添加这样一条路线

routes.MapRoute("TopLevelProduct", "{topLevelId}/Product/{id}", 
           new { controller = "Product", action = "Index" });
你们可以用任何你们想点击的动作来替换索引,若你们想使用可选的默认值(我已经重命名了你们的顶级标识符,因为在C中使用这些连字符很尴尬)#


像这样的方法应该会奏效:

 routes.MapRoute(
     name: "WithTopId",
     url: "{topId}/{controller}/{action}/{id}",
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
     constraints: new { topId = "^[0-9]*$", id = "^[0-9]*$" }
 );
然后将此路由置于默认路由之上

 routes.MapRoute(
     name: "WithTopId",
     url: "{topId}/{controller}/{action}/{id}",
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
     constraints: new { topId = "^[0-9]*$", id = "^[0-9]*$" }
 );