2012-12-25 90 views
0

我工作的一个图像浏览器,所以我控制器命名为Viewer,当我通过它routeValues它在URL中传递这样的: http://www.mywebsite.com/Viewer?category=1&image=2URL重写我的ASP.NET MVC网站

这里是用来在该网页上的链接:

@Url.Action("Index", new { category = p.Category, image = p.Image }) 

但我确实喜欢这个网址: http://www.mywebsite.com/Viewer/1/2

我曾尝试在01做了一些小技巧RouteConfig类的方法,但我无法得到以前的结果。

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      name: "Viewer", 
      url: "{controller}/{action}/{category}-{image}", 
      defaults: new { controller = "Viewer", action = "Index", category = 1, image = 1 } 
     ); 
    } 
} 

有没有人知道我可以在哪里做到这一点?

非常感谢!

回答

3

你需要把你的更具体的路由默认路由之前,因为路由在你宣布他们同样的顺序进行评估:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Viewer", 
      url: "{controller}/{action}/{category}/{image}", 
      defaults: new { controller = "Viewer", action = "Index", category = 1, image = 1 } 
     ); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
}