2014-09-24 163 views
14

我正在尝试将所有与现有控制器不匹配的url重定向到某个控制器。没有控制器或操作名称的Asp.net mvc路由

例如,URL mywebsite.com/newyork应该被处理为mywebsite.com/Cities/Info/newyork

我使用下面的代码在我的RegisterRoutes,但它似乎并没有因为我的工作得到404的回复:

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

回答

18

你应该首先把你的城市路线,丢弃空的默认参数:

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

的路线,以便进行处理,所以你应该有最具体的首先到最不具体(你的默认路线)。

由于您的website.com/newyork与默认路线相匹配,因此您的城市路线无法继续使用。

相关问题