2017-08-30 113 views
1

我已经定义了几个静态路由看起来像以下1个动态路由:定义多个静态路由和1个控制器.NET MVC

routes.MapRoute(
      name: "LogOutRoute", 
      url: "Index/LogOut", 
      defaults: new { controller = "Index", action = "LogOut" } 
      ); 
    routes.MapRoute(
      name: "Tutorials", 
      url: "Index/Tutorials", 
      defaults: new { controller = "Index", action = "Tutorials" } 
      ); 

;第三是它看起来像下面的动态路由:

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

我想为我的索引控制器来定义这两条静态路由:

/Index/Tutorials 
/Index/LogOut 

每隔路线应指向:

/Index/{id} 

我定义它现在适用于2个静态路由,但这样当我试图通过参数这样是不是像下面两个静态路由之一:

http://localhost:60617/Index/12345/ 

其中12345是ID,我得到以下错误:

The resource cannot be found. 

我怎样才能正确地定义这些路线?有人可以帮我吗 ?

下面是路由类:

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


     routes.MapRoute(
     name: "LogOutRoute", 
     url: "Index/LogOut", 
     defaults: new { controller = "Index", action = "LogOut" } 
     ); 
     routes.MapRoute(
     name: "Tutorials", 
     url: "Index/Tutorials", 
     defaults: new { controller = "Index", action = "Tutorials" } 
     ); 

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


    } 
} 

回答

1

在其中映射路径是重要的订单。

通用路由应在更具体的路由之后映射以避免路由冲突。

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

     routes.MapRoute(
      name: "LogOutRoute", 
      url: "Index/LogOut", 
      defaults: new { controller = "Index", action = "LogOut" } 
     ); 

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

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

     routes.MapRoute(
      name: "ResetPwdRoute", 
      url: "User/ResetPwd/{id}", 
      defaults: new { controller = "User", action = "ResetPwd", id = UrlParameter.Optional } 
     ); 

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

还应当指出的是,'ResetPwdRoute'在这种情况下是完全没有意义的,因为'Default'路线无论如何都会处理这种情况。 – NightOwl888