2014-06-26 39 views
0

工作,我有我的應用程序的頂部導航欄下面的代碼:默認路由索引不是新控制器

<li>@Html.ActionLink("Users", "Index", "Account")</li> 
<li>@Html.ActionLink("Models", "Index", "Models")</li> 

在的AccountController我有以下指數函數:

 [Authorize(Roles = "Admin, CanEditGroup, CanEditUser")] 
     public ActionResult Index() 
     { 
      var users = _db.Users; 
      var model = new List<EditUserViewModel>(); 
      foreach (var user in users) 
      { 
       var u = new EditUserViewModel(user); 
       model.Add(u); 
      } 
      return View(model); 
     } 

在ModelsController我有以下指數函數:

 public ActionResult Index() 
     { 
      return View(); 
     } 

當我點擊「用戶'鏈接我被帶到'/帳戶'和索引正確顯示。然而,當我點擊'Models'鏈接時,我被帶到'/ Models'並收到'HTTP Error 403.14 - Forbidden'錯誤。當我調試時,我可以看到'ModelsController'中的Index函數沒有被擊中。 '/ Models/Index'雖然工作正常。

應該指出,我在AccountController已經存在的地方使用了一個模板。我自從添加了ModelsController。

最後,這裏是我的簡單的路由文件:

  routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

請幫助我瞭解,這是造成在路由行爲差異的AccountController和ModelsController之間的差異。

+0

你可以使用一個測試工具來驗證這個問題,是這樣的:http://haacked.com/archive/2008/03 /13/url-routing-debugger.aspx/。我以爲有一個更新的工具,但找不到一個... –

回答

4

我想你已經有一個模型文件夾或其他資源與你的項目中的命名模型。 您可以更改您的控制器名稱。

或設置爲RouteExistingFiles路線集合

routes.RouteExistingFiles = true; 

將有助於

+0

謝謝馬拉松手,你已經指出我在正確的方向。由於這是一個MVC項目,當然已經有一個名爲'Models'的文件夾。 我曾希望路由能夠足夠聰明地知道MVC模型和我的'Models'控制器/視圖之間的區別。這似乎並不是這種情況。令人討厭的'ModelsController'是我們正在做的事情的完美描述。 RouteExistingFiles實際上工作,但我剛剛重命名控制器和視圖文件夾作爲一個更好的修復。 –

+0

@Starky我的回答後,我也搜索了一些webforms的checkPhysicalUrlAccess。但目前我沒有更好的答案。我認爲控制器命名的保留關鍵字:) – marathonman

相關問題