我很困惑我可能会说在网站上发现所有其他帖子。
我的解决方案有两个区域Front和Back,我不想使用默认提供的默认根控制器和视图。
我的 FrontAreaRegistration.cs 就像:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Front",
"Front/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
, new[] { "Show.Areas.Front.Controllers" }
);
}
我的 BackAreaRegistration.cs 就像:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Back_default",
"Back/{controller}/{action}/{id}",
new { controller = "Account", action = "LogOn", id = UrlParameter.Optional }
, new[] { "Show.Areas.Back.Controllers" }
);
}
Global.asax 喜欢:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
获得以下异常:
发现多个类型与名为“Home”的控制器匹配。这个 如果为此请求提供服务的路由可能会发生 ('{controller} / {action} / {id}')未指定要搜索的命名空间 对于匹配请求的控制器。如果是这种情况, 通过调用'MapRoute'方法的重载来注册此路由 它采用'名称空间'参数。
'Home'的请求找到了以下匹配的控制器: Show.Areas.Front.Controllers.HomeController Show.Areas.Back.Controllers.HomeController
问题是我无法从Front区域到达Home控制器。即使将正确的命名空间添加到context.MapRoute方法重载......
任何帮助将不胜感激。
答案 0 :(得分:1)
引发错误是因为您未在请求中指定区域名称。正因为如此"默认"路由(来自Global.asax)匹配请求并尝试搜索"索引" " Home"的行动控制器。至于两个匹配(对于两个区域),抛出异常。
解决这个问题的方法很少。一种可能是修改Global.asax:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new[] { "Show.Areas.Front.Controllers" }
).DataTokens.Add("Area", "Front");
但在这种情况下"默认"路线仅适用于前区。