当两个控制器具有相同的名称时,我有一个常见的错误:
发现多个类型与名为' Items'的控制器匹配。 如果为此请求提供服务的路由,则会发生这种情况 (' {controller} / {action} / {id}')未指定要搜索的命名空间 对于匹配请求的控制器。如果是这种情况, 通过调用' MapRoute'的过载来注册此路线。方法 这需要一个名称空间'参数。
对'项目'的请求找到了以下匹配的控制器:
Stock.Controllers.ItemsController
Stock.Areas.Admin.Controllers.ItemsController
这是正确的,因为我在不同的命名空间中有两个具有此名称的控制器(如上面的错误中所述)。但是,我发现的大多数修复程序都是将名称空间添加到默认根目录,例如。
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new string[] { "Stock.Controllers" }
);
在我的AdminAreaRegistration.cs文件中,创建的默认路由是:
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
所以我尝试将命名空间添加到该路由中,但这并没有修复它,例如。
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
new string[] { "Stock.Areas.Admin.Controllers" }
);
我确保调用AreaRegistration.RegisterAllAreas,例如
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
任何人都可以发现我缺少的东西或建议我应该做些什么来让两个控制器都工作吗?
由于
答案 0 :(得分:2)
我发现了一个解决了我的问题的方法,我不得不通过“ControllerBuilder.Current.DefaultNamespaces.Add”方法在应用程序启动事件上添加默认命名空间:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
ControllerBuilder.Current.DefaultNamespaces.Add("Stock.Controllers"); // Add This
}