索引的默认路由不适用于新控制器

Ala*_*ark 1 asp.net-mvc routing .net-4.5

我的应用程序顶部的导航栏有以下代码:

<li>@Html.ActionLink("Users", "Index", "Account")</li>
<li>@Html.ActionLink("Models", "Index", "Models")</li>
Run Code Online (Sandbox Code Playgroud)

在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);
        }
Run Code Online (Sandbox Code Playgroud)

在ModelsController中,我有以下索引函数:

        public ActionResult Index()
        {
            return View();
        }
Run Code Online (Sandbox Code Playgroud)

当我点击"用户"链接时,我将被带到"/帐户"并正确显示索引.但是,当我点击"模型"链接时,我被带到'/ 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 }
            );
Run Code Online (Sandbox Code Playgroud)

请帮助我理解AccountController和ModelsController之间的区别,这会导致路由行为的差异.

小智 5

我认为你的项目中已经有一个模型文件夹或其他一些带有命名模型的资源.您可以更改控制器名称.

或者为您的路径集合设置RouteExistingFiles

routes.RouteExistingFiles = true;
Run Code Online (Sandbox Code Playgroud)

会有所帮助