2017-08-30 54 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