【问题标题】:Wrong route selected in ASP.NET MVC 3在 ASP.NET MVC 3 中选择了错误的路由
【发布时间】:2012-05-25 18:16:26
【问题描述】:

请有人解释一下这个问题,这让我发疯了!

路线:

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,正确的路由会被执行!!!

【问题讨论】:

  • 为什么您的默认交易路线上没有{controller}{action}?您是否尝试过将该路线移至列表顶部?因为路由将匹配它可以满足的第一条路由。
  • @mattytommo 问题是路由确实显示了正确的 url 相关部分(/Order/PayPalNotify/9/blabla),但是将其标记化会产生完全不同的结果(请参见带有值的表)。这就是让我发疯的原因!路线的顺序应该总是从更具体的路线到更一般的路线(这是我正在练习的)

标签: asp.net-mvc-3 routes


【解决方案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-02-23
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 2013-02-28
    • 2016-07-30
    • 2016-07-30
    相关资源
    最近更新 更多