我有一个 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
只要