ASP.NET MVC - Area與Controller之Routing問題
今天在測試MVC的Area的時候,發現了一個問題,目錄的層級大概是這樣 Area - Test -Controllers - AAController.cs -Views - AA - Index.cshtml Controllers - 無東西 Views - 無東西 此時跑測試的時候。 http://xxx/Test/AA 這是正常沒問題的。 http://xxx/AA 顯示的卻是一個例外,找不到Index.cshtml這個View,可見如果根目錄下的Controller如果沒有任何Controller的話,http://xxx/AA也會直接到Area -> Test -> Controller這個目錄下讀取AAController。
對我來說,這是一個很奇怪的現象,而且未來很容易出錯,假設,今天我在根目錄也建立了一個AAController和的Views,未來刪除掉根目錄的AAController但又忘記刪除Views,此時就會讀到Test這個Area的AAController,並且順利執行。( 但實際上我是不要順利執行的 .... )
會產生這個原因是因為,如果在當下之NameSpace找不到Controller,會自動的去搜尋別的Controller,本來以為在Routing設定的時候,加上NameSpace就可以了,但實際上不然,整個要改寫成這樣,才會正常
routes.MapRoute( "Default" , // 路由名稱 "{controller}/{action}/{id}" , // URL 及參數 new { action = "Index" , id = UrlParameter .Optional }, new string [] { "MVC.Controllers" } ).DataTokens["UseNamespaceFallback" ] = false ;
必須加上DataTokens["UseNamespaceFallback" ] = false ; 告訴路由,只要抓取這個NameSpace底下的Controller就好,不要再去找整個目錄的Controller。