2011-06-26 141 views
0

有我去除控制器和操作,而不会干扰默认路由的网址? 例如:自定义路由 - 从URL中删除控制器和动作

来自: http://mysite.com/departaments/products/footwear/male其中departaments =控制器,动作=制品和鞋类和男性=参数

到: http://mysite.com/footwear/male

所以我采取控制器和动作上的定制的路由例子:

 routes.MapRoute 
     (
      "Products", 
      "{p0}/{p1}/{p2}/{p3}/{p4}/{p5}", 
      new 
      { 
       controller = "Departaments", 
       action = "Products", 
       p0 = "", 
       p1 = "", 
       p2 = "", 
       p3 = "", 
       p4 = "", 
       p5 = "" 
      }, 
      new String[] 
      { 
       "MvcApplication1.Controllers" 
      } 
     ); 


     routes.MapRoute 
     (
      "Default", 
      "{controller}/{action}/{p0}", 
      new 
      { 
       controller = "Home", 
       action = "Index", 
       p0 = "" 
      }, 
      new String[] 
      { 
       "MvcApplication1.Controllers" 
      } 
     ); 

回答

0

您必须在Default路由后添加Products路由,否则产品路由将以alwa ys匹配任何六段或更少的网址。这可能会引入一个新问题,除非您使用所有控制器名称向控制器令牌添加约束,否则默认路由将匹配任何三段或更少段的URL。 controller = @"home|account|departments"。该库可以自动注册非常严格的路由(对控制器和操作使用约束),然后您也可以添加自己的路由,而不必担心冲突。


routes.MapRoute("Default", "{controller}/{action}/{p0}", 
    new { controller = "Home", Action = "Index", p0 = "" }, 
    new { controller = @"Home|Account" }, // Register controllers here 
    new[] { "MvcApplication1.Controllers" }); 

routes.MapRoute("Products", "{p0}/{p1}/{p2}/{p3}/{p4}/{p5}", 
    new { controller = "Departaments", Action = "Products", p0 = "", p1 = "", p2 = "", p3 = "", p4 = "", p5 = "" }, 
    new[] { "MvcApplication1.Controllers" }); 
+0

你有这个实现的例子吗? –

+0

@Tiago Tartari:添加示例代码。 –