【问题标题】:How to resolve multiple controller error when using ASP.NET sitemap provider使用 ASP.NET 站点地图提供程序时如何解决多个控制器错误
【发布时间】:2012-09-20 05:54:17
【问题描述】:

我正在使用 ASP.NET MVC3 和 ASP.NET MVC Sitemap Provider

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

第一个应用程序控制器是针对普通网站用户的。另一个应用程序控制器供管理员使用。

我希望我的网址显示为:

/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 将正确显示。但随后我可以让第二条区域路线按预期工作。

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-routing


    【解决方案1】:

    什么版本的提供者?

    路线看起来一般。我之前遇到过这样的问题(在更复杂的场景中)并且 SiteMap 使用了命名空间解析(这应该可以作为路由的命名空间表明控制器不同)。

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

    controllerTypeResolver="MyProject.Web.YourControllerTypeResolver, MyProject" 
    

    在创建租户拥有不同控制器的多租户应用程序时,我必须这样做,我必须提供替代解决策略。

    通常您还需要空白区域(我从不这样做)。此外,一般情况下,您是否需要在子节点等中指定控制器,就好像您不确定它使用父节点一样。

    ---更新--

    我认为这可能是一个错误。看看这里https://github.com/maartenba/MvcSiteMapProvider/issues/78

    应该在 3.3.4.0 中修复

    【讨论】:

      猜你喜欢
      • 2011-08-21
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 2018-12-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多