在ASP.NET MVC路由(不是Web API)中,如何匹配路由开头的任何整数,而不是匹配。
例如,我看到提示如何匹配/ website / Product / {id}的示例 - 这里使用id参数创建ProductController,并在id参数上指定约束。
然而,我正试图匹配一条看起来如此的路线 - /网站/ {顶层-ID} /产品/ {ID}
top-level-id可以是任何整数。关于如何解决这个问题的任何想法?
答案 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 });