【问题标题】:MapRoute gives 404 error when controller is located in a subfolder当控制器位于子文件夹中时,MapRoute 给出 404 错误
【发布时间】:2014-02-01 22:07:34
【问题描述】:

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

/控制器/

  • 家庭控制器
  • SomeOtherController

/控制器/管理员

  • 管理员控制器
  • 一些控制器

/查看次数

  • 首页
  • 其他人

/视图/管理员

  • 管理员
  • 一些

问题是找不到管理文件夹中的控制器/视图并给出一个 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 }
    );
}

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

【问题讨论】:

  • 你能不能试着把这条路线放在默认路线之前,我知道这听起来很奇怪,但这就是我一直这样做的方式?
  • 哇,成功了!为什么它起作用了?我错过了什么还是顺序无关紧要?无论如何,将其发布为答案,以便我可以给你信用。谢谢!
  • 添加作为答案,我真的不知道。就是我被教导这样做并盲目地遵循的方式。我会做一些研究并试着把答案填出来:)

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


【解决方案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

【讨论】:

  • 之所以有效,是因为路由是从上到下评估的,因为 name: "Default", 处于顶部,它正在处理所有事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
相关资源
最近更新 更多