1

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

例如,我看到提到如何匹配 /website/Product/{id} 的示例 - 这里使用 id 参数创建 ProductController 并在 id 参数上指定约束。

但是,我正在尝试匹配这样的路线 - /website/{top-level-id}/Product/{id}

顶级 ID 可以是任何整数。关于如何解决这个问题的任何想法?

4

2 回答 2

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

然后只需将此路由放在默认路由之上。

于 2013-09-12T15:43:08.233 回答
0

您可以添加这样的路线

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

您可以将 Index 替换为您想要执行的任何操作,并且如果您的 id 具有可选的默认值(我已重命名您的顶级标识符,因为在 C# 中使用这些连字符很尴尬

routes.MapRoute("TopLevelProduct", "{topLevelId}/Product/{id}", 
       new { controller = "Product", action = "Index", topLevelId = 0, id = 0 });
于 2013-09-12T15:42:10.657 回答