【发布时间】: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