2008-09-16 120 views
5

我嘗試了ASP.NET MVC路由,當然有偶然發現一個問題。我有一個部分/ Admin/Pages /,這也可以通過/ Pages /訪問,它不應該訪問它。我可能會錯過什麼?Asp.net MVC路由不明確,兩個路徑相同的頁

在Global.asax中路由代碼:

public static void RegisterRoutes(RouteCollection routes) 
{ 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute(
      "Pages", // Route name 
      "Admin/Pages/{action}/{id}", // URL with parameters 
      // Parameter defaults 
      new { controller = "Pages", action = "Index", id = "" } 
     ); 

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

    } 

謝謝!

回答

6

我建議在開始時爲/ Pages /添加顯式路由。

的問題是,它是由所述默認路由處理,並導出:

控制器=「頁數」 行動=「索引」 ID =「」

其是完全一樣的參數爲您的管理路線。

2

您可以將約束添加到默認規則,以便{Controller}標記不能爲「Pages」。

0

您首先有{action}標記/參數與默認行爲的設置發生衝突。嘗試更改路線中的參數名稱,或刪除默認操作名稱。

6

對於這樣的路由問題,您應該試試我的Route Debugger程序集(僅在測試中使用)。它可以幫助找出這些類型的問題。

P.S.如果您嘗試保護Pages控制器,請確保使用[Authorize]屬性。不要只依賴URL授權。

+0

這應該是答案,因爲意圖是保護PagesController的Index操作方法。 – 2014-09-23 05:36:24