当我有像
这样的路线图配置时,我遇到了这样的问题routes.MapRoute(
name: "Merchandise",
url: "Merchandise/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
我从@ Html.Action获取了“hxxp://site.com/Merchandise/Controller/Action/1”(“操作”,“控制器”,新{Id =“1”})其中“hxxp:/ /site.com/Controller/Action/1“是预期的。
如果路线图配置为
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Merchandise",
url: "Merchandise/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
然后当我尝试使用商品不是控制器的“hxxp://site.com/Merchandise/Controller”时,我得到404(“hxxp://site.com/Merchandise/Controller/Action/1”是好的BTW)。我怎样才能解决这个矛盾呢?我想要的是,“商品”在这里扮演的是角色,但不是控制者。
答案 0 :(得分:2)
您案例中的商品可称为区域。引用ASP.NET MVC中的区域 根据路由设计,如果您有任何应在默认路由之前定义的自定义路由。因为这是将URL解码为路由的顺序。因此,在第一种情况下,您在默认路由之前定义了自定义路由,因此它可以正常工作,而在第二种情况下,首先定义默认路由。