如何解决使用ASP.NET站点地图提供程序时出现的多控制器错误

如何解决使用ASP.NET站点地图提供程序时出现的多控制器错误,asp.net,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,asp.net-mvc-routing,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,Asp.net Mvc Routing,我正在使用ASP.NET MVC3和 我有一个名为Application的控制器。我还有一个领域叫管理。在管理区,我还有一个名为Application的控制器 第一个应用程序控制器适用于普通网站用户。另一个应用程序控制器是为管理员设计的 我希望我的URL显示如下: /Application/1001/Notes /Administration/Application/1001/Notes 我对上述2个URL的路由注册如下: Routes.MapRoute("ApplicationNote",

我正在使用ASP.NET MVC3和

我有一个名为Application的控制器。我还有一个领域叫管理。在管理区,我还有一个名为Application的控制器

第一个应用程序控制器适用于普通网站用户。另一个应用程序控制器是为管理员设计的

我希望我的URL显示如下:

/Application/1001/Notes
/Administration/Application/1001/Notes
我对上述2个URL的路由注册如下:

Routes.MapRoute("ApplicationNote",
     "{controller}/{applicationId}/Notes",
     new { controller = "Application", action = "Notes" },
     new { applicationId = @"\d+" },
     new[] { "MyProject.Web.Controllers" });

Routes.MapRoute("AdminApplicationNote",
     "{area}/{controller}/{applicationId}/Notes",
     new { area = "Administration", controller = "Application", action = "Notes" },
     new { applicationId = @"\d+" },
     new[] { "MyProject.Web.Areas.Administration.Controllers" });
当我运行我的应用程序并转到应用程序控制器中的任何操作方法时,我在这里得到一个错误:

@Html.MvcSiteMap().SiteMapPath()
错误是:

Found multiple controllers:Application
以下是我的站点地图配置的部分视图:

 <mvcSiteMapNode title="About" area="" controller="Home" action="About" />

 <mvcSiteMapNode title="Applications" area="" controller="Application" action="Index" key="ApplicationIndex">
      <mvcSiteMapNode title="Create Application" area="" controller="Application" action="Create" />
      <mvcSiteMapNode title="Applications List" controller="Application" area="" action="List" />
 </mvcSiteMapNode>

 <mvcSiteMapNode title="Administration Dashboard" area="Administration" controller="Dashboard" action="Index">
      <mvcSiteMapNode title="Users Dashboard" area="Administration" controller="User" action="List" />
 </mvcSiteMapNode>



我将如何解决这个问题?如果删除名为AdminApplicationNote的路由,其他应用程序URL将正确显示。但这样我就可以按计划使用第二条区域路线。

什么版本的提供商

总的来说,路线看起来不错。我以前遇到过类似的问题(在一个更复杂的场景中),SiteMap使用了名称空间解析(这应该可以作为路由控制器的名称空间)

我建议您从github获取的代码。认为它在第285行抛出异常,该异常与使用名称空间定位控制器有关。使用源代码来实现您自己的版本(当然,如果您已经获得了源代码,可以直接进入他们的代码中),然后使用您的版本断点并介入,并确定为什么它声称它们是重复的。您需要在Web.config中注册您的实现。e、 差不多

controllerTypeResolver="MyProject.Web.YourControllerTypeResolver, MyProject" 
在创建多租户应用程序时,我必须这样做,租户有不同的控制器,我必须提供替代的解决策略

一般来说,你需要空的区域(我从来没有这样做过)。通常,您是否需要在子节点等中指定控制器,就好像您不需要一样?我确信它使用父节点

---更新--

我想这可能是个错误。看看这里

应在3.3.4.0中固定