2012-05-25 9 views
0

Может ли кто-то пролить свет на эту проблему, это сводит меня с ума!Неправильный маршрут, выбранный в ASP.NET MVC 3

Маршруты:

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: ~/Заказ/PayPalNotify/9/adfaf (именно то, что я ожидал) !!!

Отладчик также показывает, что маршруты DefaultOrderingRoute и DefaultDealRoute сопоставлены (этого я не ожидал, так как у меня есть ограничения на маршруты!).

Он также показывает, что согласованный маршрут:

Сопрягано Маршрут: {контроллер}/{действие}/{ID}/{пробкового}

с данными по маршруту:

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

Как это возможно?? Что я делаю не так?

PS. Я заметил, что по переиздавая URL-адрес, правильный маршрут выполняется!

+0

Почему у вас нет '{controller}' и '{action}' на вашем маршруте по умолчанию? Вы пробовали переместить этот маршрут в начало списка? Поскольку маршрутизация будет соответствовать первому маршруту, он может удовлетворить. – mattytommo

+0

@mattytommo Проблема заключается в том, что маршрутизация показывает правильную относительную часть URL (/ Order/PayPalNotify/9/blabla), но при этом токенизация этого результата дает нечто совершенно иное (см. Таблицу со значениями). Это то, что сводит меня с ума! Порядок маршрутов должен быть всегда от более конкретного маршрута до более общего маршрута (это то, что я практикую) –

ответ

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

Это вызвало выделение из «ложный» маршрут ... очень плохо !!

Смежные вопросы