2012-07-09 33 views
0

我不知道爲什麼我經常爲此而鬥爭,但有人可以解釋爲什麼這不起作用?.NET MVC3路由 - 爲什麼這麼混亂?

/重定向到home控制器的index動作。

/gallery/拋出404找不到錯誤。

/gallery/index重定向到gallery控制器的index動作。

documentation

當你定義的路由,你可以指定一個參數的默認值。如果該參數的值未包含在URL中,則使用默認值。通過將字典對象分配給Route類的Defaults屬性,可以爲路由設置默認值。

我不明白這是如何不遵守這條規則:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.MapRoute(
      "Default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

對我來說,有這麼一句話:

  • 如果沒有定義controller,使用Home
  • 如果未定義action,請使用Index
  • 輸入的URL包含一個控制器= gallery,並且動作未包含在URL中,因此它應該轉到Index

我錯過了什麼或這種不必要的混亂和愚蠢?

我一直髮現MVC3路由有問題,但接受它。然後我開始使用Rails和Node框架,並且它們具有可笑的簡單路由選擇,所以現在當.NET MVC無法正常工作或使我使用複雜模式時,它就會讓我惱火。

如果有人詢問,我的圖庫控制器,動作和視圖全部定義並適用於當我瀏覽/gallery/index時的參考。

public class GalleryController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 
+0

要澄清,你只有這1個路由定義,默認路由?沒有其他路線宣佈之前,你沒有使用區域? – danludwig 2012-07-09 21:05:19

+0

你在所有方面都是正確的。你有沒有添加另一條路線? – Tyrsius 2012-07-09 21:05:27

+0

不,我故意發佈了整個'RegisterRoutes'方法來清除只有默認路由。 – Terry 2012-07-09 22:32:33

回答

5

您肯定應該做錯某些事情,或者您有一些代碼沒有顯示給我們。執行以下步驟:

  1. 創建一個新的ASP。使用默認的嚮導NET MVC 3應用程序(互聯網應用
  2. 與此更換的HomeController.cs內容:

    public class HomeController : Controller 
    { 
        public ActionResult Index() 
        { 
         return Content("home/index"); 
        } 
    } 
    
    public class GalleryController : Controller 
    { 
        public ActionResult Index() 
        { 
         return Content("gallery/index"); 
        } 
    } 
    
  3. 命中F5

這裏發生了什麼:

requested url | result 
-----------------+--------------- 
/    | home/index 
/home   | home/index 
/home/   | home/index 
/home/index  | home/index 
/home/index/  | home/index 
/gallery   | gallery/index 
/gallery/  | gallery/index 
/gallery/index | gallery/index 
/gallery/index/  |   gallery/index 

完全如人意,不是嗎?

+0

確實如你所說的那樣工作,現在我要做一個比較,看看我的其他應用程序(這是一個空項目類型)有什麼不同。 – Terry 2012-07-10 13:38:06

+0

這是正式的愚蠢的開發人員時刻之一。爲了對具體問題做出具體的回答,我問了我正在回答我自己的問題。感謝Darin的澄清,希望在這種情況下我可以給予更多的支持。 – Terry 2012-07-10 14:18:51

1

問題是我有一個隱藏目錄(不包括在我的解決方案)具有相同的名稱作爲我的錯誤路線:/gallery

幸運的是,我今天早上衝我的顯示器是太累了。

謝謝大家對您的建議,所有+1了有益的指導。

PS。爲了幫助我調查我使用的問題Phil Haack's routing debugger

+1

嘿,+1不會攻擊你那個可憐的手無寸鐵的監視器':)' – halfer 2012-07-10 14:29:43