2011-08-30 175 views
0

這是我的RegisterRoutes方法在Global.asax中:URL路由工作不正常

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

      routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

      routes.MapRoute("ListBooks", 
       "Home/Books/{id}", 
       new { controller = "Home", action = "Books" }, 
       new { id = @"\d{2}" }); 


     } 

正如你可以在約束看,我指定的ID應該是強制性的有2位。但是已經指定了這一點,即使我輸入了一位數字的書籍ID,它仍然運行得很好。有人可以告訴我這有什麼問題嗎?

回答

0

你的約束按預期工作和URL不匹配的「ListBooks」路線。但是,如果您更接近「Default」路線,它具有與「ListBooks」相同的簽名 - 但沒有限制。因此「Default」可處理該單個數字id網址。在這種情況下,您的路由順序無關緊要,因爲「Default」無論如何都會捕獲單個數字id url。

1

您的默認路由應放置在其他路由之後,否則將採用優先級。

+0

我真的不知道這個答案有兩個upvotes - 這是錯誤的。路線排序與這種情況無關。這應該是評論,而不是 – archil

+0

我認爲你錯了。路由排序在這裏很重要,因爲* ListBooks *路由與默認路由的url /參數共享。 –

+0

@Erfan,問題是關於路由配置中的錯誤。無論Jaggu是首先還是最後一次放置「默認」路線,當「ListBooks」限制不符合時(單個數字帳戶ID),「Default」將處理網址。 – archil

0

試試這個

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


     routes.MapRoute("ListBooks", 
      "Home/Books/{id}", 
      new { controller = "Home", action = "Books" }, 
      new { id = @"\d{2}" }); 

      routes.MapRoute( 
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

    }