2012-05-25 8 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에 대한 그래서 :

AppRelativeCurrentExecutionFilePath :

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

의 URL 디버거는 다음을 보여줍니다 (내가 기대 한 정확히) ~/주문/PayPalNotify/9/adfaf을!

디버거는 또한 DefaultOrderingRoute 및 DefaultDealRoute 경로가 일치 함을 보여줍니다 (경로에 제한이 있으므로 기대하지 않았습니다!).

또한 유사한 경로가 있음을 보여준다

경로 일치

{컨트롤러}/{동작} 경로 데이터/{ID}/{슬러그}

:

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

이것이 어떻게 가능한지?? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

추신. 나는 을 재발행함으로써 정확한 경로가 실행되는 것을 발견했습니다!

+0

기본 거래 경로에'{controller}'및'{action} '이 없습니까? 그 경로를 목록의 맨 위로 옮기려고 했습니까? 라우팅은 첫 번째 경로에서 일치하므로 만족할 수 있습니다. – mattytommo

+0

@mattytommo 문제는 라우팅이 올바른 URL 상대 부분 (/ Order/PayPalNotify/9/blabla)을 나타내지 만이 수율을 완전히 다른 것으로 토큰 화하는 것입니다 (값이있는 표 참조). 이것이 나를 미치게 만드는 이유입니다. 노선의 순서는보다 구체적인 경로에서 좀 더 일반적인 경로로 항상 이뤄져야합니다 (이것이 제가 연습하고있는 것입니다) –

답변

1

미스터리 해결 : 내가 아주 나쁜 일을하고 있었다 (!) :이의 선택을 발생

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

(기타 사이) 다음과 같은 한 곳에 코드를했다

으로 session_start에서

() "거짓"길 ... 매우 나빴다!!

관련 문제