2014-06-26 42 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

相关问题