我有一个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
MyProject.Controllers.Api.ConcertsController
MyProject.Areas.Admin.Controllers.ConcertsController
;和MyProject.Areas.Admin.Controllers.HomeController
答案 0 :(得分:0)
这根本不是路由问题,而是视图定义的问题:每个ConcertsController视图都包含一个Layout语句,该视图将视图指向主站点的布局。