ASP.NET MVC路由匹配。

时间:2013-09-12 15:37:31

标签: 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}

top-level-id可以是任何整数。关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:3)

这样的事情应该有效:

 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]*$" }
 );

然后将此路线放在默认路线上方。

答案 1 :(得分:0)

你可以添加这样的路线

routes.MapRoute("TopLevelProduct", "{topLevelId}/Product/{id}", 
           new { controller = "Product", action = "Index" });

你可以用你想要击中的任何动作替换索引,如果你有可选的默认值(我已经重命名你的顶级标识符,因为它在C#中使用那些连字符很尴尬

routes.MapRoute("TopLevelProduct", "{topLevelId}/Product/{id}", 
       new { controller = "Product", action = "Index", topLevelId = 0, id = 0 });