2011-02-01 99 views
4

我的MVC 3應用程序Auth和Users中有幾個區域。我正在使用Phil Haacks Route Debugging tool查看我的路線列表,並根據我的網址查看選擇哪一個路線。ASP.NET MVC是否爲區域創建默認路由

但是,我還沒有在AreaRegistration文件或Globalasax中創建幾條路線,我不知道它們來自哪裏或如何擺脫它們。路線在下面以黃色突出顯示。

您還可以看到我在Auth區域(綠色突出顯示)中創建了一個默認路由,它只是指向我的Auth控制器的登錄操作。我調試了RouteTable,它在AreaRegistration.RegisterAllAreas();方法被調用。然而,它並沒有被加入到AreaRegistration中,因爲它們也通過了。

ASP.NET MVC是否將此作爲默認添加,如果可以,我可以以某種方式刪除它?

enter image description here

回答

5

我不喜歡回答我的問題,但後一天試圖解決這個問題,我想我會發布答案,以防其他人有相同的問題。

最後,我擺脫了我的應用程序中的所有區域,並且只有基本的Global.asax路由。當我運行應用程序時,我可以在路由調試器中看到路由集合仍在填充來自現在不存在的區域的路由。在嘗試了很多事情之後,包括從我的ASP.NET臨時文件中刪除所有內容,搞亂IIS AppPools並清理瀏覽器數據,我終於遇到了答案。

我刪除了從網站bin文件夾中的所有內容,做了重建,然後低下,路線消失了。我用所描述的配置恢復了我的區域,並且一切正常。

我不知道爲什麼我的MVC應用程序保持和填充舊的路線,但只要我的垃圾箱被清除,新的DLL創建一切正常,因爲它應該。如果有人知道爲什麼會這樣,那麼我會非常感興趣。

2

是的,每個區域都有它自己的AreaRegistration文件定義了區域內路由。在您的區域根文件夾中查找它。

您的用戶區域,看在領域 - >用戶 - > UserAreaRegistration.cs

它應該包含這樣的事情:

public class UserAreaRegistration : AreaRegistration 
    { 
     public override string AreaName 
     { 
      get 
      { 
       return "User"; 
      } 
     } 

     public override void RegisterArea(AreaRegistrationContext context) 
     { 
      context.MapRoute(
       "User_default", 
       "User/{controller}/{action}/{id}", 
       new { action = "Index", id = UrlParameter.Optional } 
      ); 
     } 
    } 
+0

謝謝frennky我已經知道這一點,並配置了我的問題中描述的區域註冊。 AuthAreaRegistration.cs文件中的默認路由以上面綠色突出顯示。我不明白的是,如果我已經在我的AreaRegistration.cs文件和我的Global.asax文件中配置了默認路由,黃色高亮顯示的路由來自哪裏? MVC創建它們是因爲我編輯了我的默認路由,從而將它們轉換爲自定義路由?如果是的話,我可以擺脫那個默認路線? – Cragly 2011-02-01 12:02:17

+0

您能否向我們提供您的路線註冊代碼以及global.asax和Application_Start方法。 – frennky 2011-02-01 13:15:03

0

您是否重命名過您的項目?它通過反射加載路線,可能通過掃描bin文件夾中的所有內容。因此,如果您重構了代碼並更改了程序集名稱,那麼您可以輕鬆獲取舊代碼並註冊這些路由。

JB