【问题标题】: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 });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-08
        • 1970-01-01
        • 1970-01-01
        • 2012-07-13
        • 2017-07-12
        • 2021-04-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多