结帐的 MVC4 路由子文件夹目录
MVC4 Routing Subfolder Directory for Checkout
我需要做什么才能将这些 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
当我切换顺序但首先是 Checkout Prefix 时,它弄乱了 "checkout?o=" 路由。当我把 Checkout 路由放在第一位时,第二个路由永远不会被命中。
您认为 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" }
);
我需要做什么才能将这些 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
当我切换顺序但首先是 Checkout Prefix 时,它弄乱了 "checkout?o=" 路由。当我把 Checkout 路由放在第一位时,第二个路由永远不会被命中。
您认为 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" }
);