当控制器位于子文件夹中时,MapRoute会出现404错误

时间:2014-02-01 22:07:34

标签: c# asp.net-mvc routes asp.net-mvc-5.1

尝试将MVC路由添加到我的项目中以处理带有控制器的子文件夹。我的项目结构如下:

/控制器/

  • 的HomeController
  • SomeOtherController

/控制器/管理

  • AdminController
  • SomeController

/浏览次数

  • 主页
  • 一些其它

/查看/管理员

  • 管理
  • 一些

问题是找不到admin文件夹中的控制器/视图,并且发出了n HTTP404错误。

这是我的RouteConfig

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

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

我知道我可以使用Areas,但我不想创建一个新的MVC结构。我只是想将我的控制器和视图组织到一个管理文件夹中。

1 个答案:

答案 0 :(得分:1)

您可以尝试将此新路线置于默认路线之前。

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

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

The importance of route order

它起作用是因为路线从上到下进行评估,因为name: "Default"处于最顶端,它处理了所有事情 - Satpal