【问题标题】:MVC4 Routing Subfolder Directory for Checkout用于结帐的 MVC4 路由子文件夹目录
【发布时间】:2016-07-28 22:43:23
【问题描述】:

如何将这些 URL 映射到我的路线?

example.com/checkout?o=1234
example.com/checkout/shipping?o=1234
example.com/checkout/payment?o=1234
example.com/checkout/review?o=1234
example.com/checkout/receipt?o=1234

在 RouteConfig 中,我定义了这些:

 routes.MapRoute(
         name: "Checkout",
         url: "checkout",
         defaults: new { controller = "Checkout", action = "Index", o = UrlParameter.Optional }
     );

 routes.MapRoute(
          name: "checkout Prefix",
          url: "Checkout/{controller}/{action}/{o}",
          defaults: new { controller = "Shipping|Payment|Review|Receipt", action = "Index", o = UrlParameter.Optional }
          );

控制器文件夹是:

 Controllers
      CheckoutController.cs
            Checkout
                 ShippingController.cs
                 PaymentController.cs
                 ReviewController.cs
                 ReceiptController.cs

当我切换订单但首先是结帐前缀时,它会弄乱“结帐?o =”路线。当我把 Checkout 路由放在第一位时,第二个永远不会被击中。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 url-routing asp.net-mvc-routing routeconfig


    【解决方案1】:

    您认为o 是路线的一部分的假设是不正确的。查询字符串不会作为匹配的一部分进行评估。

    此外,您应该在约束中指定正则表达式,而不是作为默认值。

    routes.MapRoute(
        name: "Checkout",
        url: "checkout",
        defaults: new { controller = "Checkout", action = "Index" }
    );
    
    routes.MapRoute(
        name: "checkout Prefix",
        url: "checkout/{controller}",
        defaults: new { action = "Index" },
        constraints: new { controller = "Shipping|Payment|Review|Receipt" }
    );
    

    【讨论】:

      猜你喜欢
      • 2013-06-27
      • 2014-06-27
      • 2018-12-13
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多