为什么我的区域路由失败的一个控制器而不是另一个?

时间:2013-05-12 18:53:38

标签: asp.net-mvc asp.net-mvc-routing

我有一个MVC 4站点,其中定义了通常的默认路由(包括API路由),还有一个管理功能区域,它有自己的路由。路由配置如下所示:

默认路线:

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

默认API路线:

routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

管理区域路线(在区域注册码中):

context.MapRoute(
    "Admin_default",
    "Admin/{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    namespaces: new[] { "MyProject.Areas.Admin.Controllers" }
);

此外,管理区域还有自己的视图布局页面。

主站点的路由都正常工作(包括API控制器的HTTP路由),但Admin区域的路由显示一些奇怪的行为。对管理区域中的主控制器的请求成功,而对管理区域中的其他控制器的请求则不成功。我得到的错误是

System.Web.HttpException: The controller for path '/admin/concerts' was not found or does not implement IController.

有趣的是,与异常相关联的堆栈跟踪包含来自主要Layout页面的代码,而不是管理区域的Layout页面,我认为该请求已被路由到默认路由而不是管理路由。

我已经尝试使用Glimpse调试路由配置,但没有太多运气,除了通过第二个媒体确认路由对于管理区域的HomeController正常工作,但不适用于该区域中的其他控制器。

更新

我定义了以下相关控制器:

  • 默认路线:
    • MyProject.Controllers.ConcertsController
    • MyProject.Controllers.HomeController
    • (其他一些,此处不相关。)
  • 默认HTTP路由:
      仅限
    • MyProject.Controllers.Api.ConcertsController
  • 行政区路线:
    • MyProject.Areas.Admin.Controllers.ConcertsController;和
    • 仅限
    • MyProject.Areas.Admin.Controllers.HomeController

1 个答案:

答案 0 :(得分:0)

这根本不是路由问题,而是视图定义的问题:每个ConcertsController视图都包含一个Layout语句,该视图将视图指向主站点的布局。