-1

Was muss ich tun, um diese URLs meinen Routen zuzuordnen?MVC4 Routing-Unterordner Verzeichnis zur Kasse

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 

Im RouteConfig habe ich diese definiert:

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 } 
     ); 

Die Controller-Ordner sind:

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

Als ich den Auftrag und aber die Kasse Präfix ersten Schalter, es vermasselt die Route "checkout? o =". Wenn ich zuerst die Checkout-Route einstelle, wird die zweite nie getroffen.

Antwort

1

Ihre Annahme, dass o Teil der Route ist, ist falsch. Abfragezeichenfolgen werden nicht als Teil der Übereinstimmung ausgewertet.

Außerdem sollten Sie den regulären Ausdruck in einer Abhängigkeit und nicht als Standardwert angeben.

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" } 
);