在 ASP.NET MVC 路由(不是 Web API)中,如何匹配路由开头而不是之后的任何整数。
例如,我看到提到如何匹配 /website/Product/{id} 的示例 - 这里使用 id 参数创建 ProductController 并在 id 参数上指定约束。
但是,我正在尝试匹配这样的路线 - /website/{top-level-id}/Product/{id}
顶级 ID 可以是任何整数。关于如何解决这个问题的任何想法?
在 ASP.NET MVC 路由(不是 Web API)中,如何匹配路由开头而不是之后的任何整数。
例如,我看到提到如何匹配 /website/Product/{id} 的示例 - 这里使用 id 参数创建 ProductController 并在 id 参数上指定约束。
但是,我正在尝试匹配这样的路线 - /website/{top-level-id}/Product/{id}
顶级 ID 可以是任何整数。关于如何解决这个问题的任何想法?
像这样的东西应该工作:
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("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 });