1

我有一个 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 路由),但管理区域的路由显示了一些奇怪的行为。向管理区域中的主控制器发出的请求成功,而对管理区域中的其他控制器的请求则不成功。我得到的错误是

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

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

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

更新:

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

  • 默认路线:
    • MyProject.Controllers.ConcertsController
    • MyProject.Controllers.HomeController
    • (其他一些,这里不相关。)
  • 默认 HTTP 路由:
    • MyProject.Controllers.Api.ConcertsController只要
  • 行政区路线:
    • MyProject.Areas.Admin.Controllers.ConcertsController; 和
    • MyProject.Areas.Admin.Controllers.HomeController只要
4

1 回答 1

0

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

于 2013-05-12T20:49:11.133 回答