【问题标题】:ASP.NET MVC route matching.ASP.NET MVC 路由匹配。
【发布时间】:2013-09-12 15:37:31
【问题描述】:
在 ASP.NET MVC 路由(不是 Web API)中,如何匹配路由开头而不是之后的任何整数。
例如,我看到提到如何匹配 /website/Product/{id} 的示例 - 这里使用 id 参数创建 ProductController 并在 id 参数上指定约束。
但是,我正在尝试匹配这样的路线 -
/website/{top-level-id}/Product/{id}
top-level-id 可以是任何整数。有什么想法可以解决这个问题吗?
【问题讨论】:
标签:
c#
.net
asp.net-mvc
asp.net-mvc-4
asp.net-mvc-routing
【解决方案1】:
这样的事情应该可以工作:
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]*$" }
);
然后把这条路由放在默认路由上面。
【解决方案2】:
您可以添加这样的路线
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 });