0

誰かがこの問題に光を当ててくれませんか、それは私を夢中にさせます!

ルート:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
     "DefaultOrderingRoute", // Route name
     "{controller}/{action}/{id}/{slug}", // URL with parameters
     new { controller = "Order", slug = UrlParameter.Optional }, // Parameter defaults
     new { controller = "^Order$" }
    );

    routes.MapRoute(
      "DefaultImageRoute", // Route name
      "{controller}/{action}/{id}", // URL with parameters
      new { controller = "Image", }, // Parameter defaults
      new { controller = "^Image$" }
    );

    routes.MapRoute(
      "FooterRoute", //route for invoking actions for the Footer
      "{controller}/{action}", // URL with parameters
      new { controller = "Footer", }, // Parameter defaults
      new { controller = "^Footer$" }
    );

    routes.MapRoute(
       "DefaultDealRoute", // Route name
       "{city}/{category}/{id}/{slug}", // URL with parameters
       new { category = Deals.Globals.Global.CATEGORY_ALL_NAME, controller = "Deal", action = "Details", slug = UrlParameter.Optional }, // Parameter defaults
       new { controller = "^Deal$", id = @"\d+" }
    );

    routes.MapRoute(
        "DealRouteForCategory", // Route name
        "{city}/{category}", // URL with parameters
        new { city = "", category = Deals.Globals.Global.CATEGORY_ALL_NAME, controller = "Deal", action = "Details" }, // Parameter defaults   
        new { controller = "^Deal$" }
    );
}

内部で何が起こっているかを確認するために、routedebugger への参照を追加しました。選択した URL の場合:

http://my.SERVER.IP/VirtualDirectoryName/Order/PayPalNotify/9/blabla

URL デバッガーは次のように表示します。

AppRelativeCurrentExecutionFilePath: ~/Order/PayPalNotify/9/adfaf (まさに私が期待したもの) !!!

デバッガーは、ルート DefaultOrderingRoute と DefaultDealRoute が一致していることも示しています (ルートに制約があるため、これは予想していませんでした!!)。

また、一致したルートが次のとおりであることも示しています。

一致したルート: {controller}/{action}/{id}/{slug}

ルートデータを使用:

controller:  Deal
action:      Details
id:          9
slug:        adfaf
city:        Athens
category:    All

これはどのように可能ですか?? 私は何を間違っていますか?

PS。URL を再発行すると、正しいルートが実行されることに気付きました!!!

4

1 に答える 1

1

謎が解けました: 私はとても悪いことをしていました (!):

Session_Start() で、次のことを行うコードがどこかにありました(特に)

    Session_Start() 
    {
// code snippet out for brevity 
//setup the city route values
    HttpContext.Current.Request.RequestContext.RouteData.Values["city"] = cityToBeginWith;
//setup the category route values
    HttpContext.Current.Request.RequestContext.RouteData.Values["category"] = Deals.Globals.Global.CATEGORY_ALL_NAME;
//setup the controller route values
    HttpContext.Current.Request.RequestContext.RouteData.Values["controller"] = "Deal";
//setup the action route values
    HttpContext.Current.Request.RequestContext.RouteData.Values["action"] = "Details";    
    }

これにより、「誤った」ルートが選択されました...非常に悪いです!!

于 2012-05-27T09:08:59.320 に答える