【问题标题】:Multiple types found routing error even though a namespace is specified即使指定了命名空间,也发现多种类型的路由错误
【发布时间】:2013-05-07 20:23:12
【问题描述】:

相关:

Multiple types were found that match the controller named 'Home'

Multiple types were found that match the controller named 'Home' - In two different Areas


找到了与名为“FW”的控制器匹配的多种类型。

“FW”的请求找到了以下匹配的控制器:

app.Controllers.Admin.FWController

app.Areas.Manage.Controllers.FWController

我尝试了这些相关链接的建议。我试图通过使用不同的命名空间来区分控制器:

global.asax.cs

routes.MapRoute(
 "Default", // Route name
 "{controller}/{action}/{id}",
 new { controller = "Account", action = "LogOn", id = UrlParameter.Optional },
 new string[] { "app.Controllers" }
);
routes.MapRoute(
 "Default_Admin_Top", // Route name
 "{controller}/{action}/{id}", // URL with parameters
 new { controller = "Account", action = "LogOn", id = UrlParameter.Optional },
 new string[] { "app.Controllers.Admin" }
);

在管理区ManageAreaRegistration

public override void RegisterArea(AreaRegistrationContext context)
{
 context.MapRoute(
  "Manage_default",
  "Manage/{controller}/{action}/{id}",
  new { action = "Index", id = UrlParameter.Optional },
  new string[] { "app.Areas.Manage.Controllers" }
 );
}

我还在 bin 文件夹中查找了旧版本,但只有当前版本。

我错过了什么?看来这应该可行。

问题似乎围绕着这样一个事实,即我为控制器提供了自己的命名空间,而它却不在自己的区域中:

namespace app.Controllers.Admin
{
 public class FWController : Controller{}
}

从这里的命名空间中删除.Admin 将消除冲突和错误,但我不完全明白为什么。

【问题讨论】:

    标签: c# asp.net-mvc-3 controller routes


    【解决方案1】:

    你能试着像这样重新整理你的死记硬背吗?可能会出现问题,因为app.Controllers.Admin 位于app.Controller

    routes.MapRoute(
     "Default_Admin_Top", // Route name
     "{controller}/{action}/{id}", // URL with parameters
     new { controller = "Account", action = "LogOn", id = UrlParameter.Optional },
     new string[] { "app.Controllers.Admin" }
    );
    routes.MapRoute(
     "Default", // Route name
     "{controller}/{action}/{id}",
     new { controller = "Account", action = "LogOn", id = UrlParameter.Optional },
     new string[] { "app.Controllers" }
    );
    

    【讨论】:

      【解决方案2】:

      它看起来类似于我最近遇到的一个问题。

      根据您的情况并遇到同样的问题,我怀疑问题出在控制器的命名约定上。例如,您的应用程序在您的根结构中有一个名为 FWController 的控制器,然后在单独的区域中重新构建/维护您的代码。当您的应用程序启动时,Global.asax 文件中的 Application_Start() 方法将路由注册到路由集合表(MVC 3 模式的核心功能之一),当控制器内部执行操作方法时,该表维护您的传入请求。

      当您有一个与您的案例 FWController 同名的控制器时,问题就出现了,并且区域的目录结构以某种方式模仿了根目录,就像您在其中一个引用的 url 中看到的那样。

      我实施了类似的解决方案作为 URL 的理由之一,即

      routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },   //Parameter defaults               
        new []{"MyProject.WWW.Controllers"}
      );
      

      我根本没有碰过我的区域 registration.cs 文件。

      当您重命名命名空间时,您的路由开始指向 app.Controllers.FWController(不在 app.Areas.Manage.Controllers.FWController 中),这解决了之前发生的冲突,因为您在 Global.asax 中指定了这一点

      routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}",
        new { controller = "Account", action = "LogOn", id = UrlParameter.Optional },
        new string[] { "app.Controllers" }
      );
      

      该请求也忽略了包含.admin 命名空间的MapRoute。这可能是我相信的原因。希望对你有所帮助。

      【讨论】:

        猜你喜欢
        • 2022-01-17
        • 1970-01-01
        • 2014-06-22
        • 2011-09-03
        • 1970-01-01
        • 2016-07-01
        • 1970-01-01
        • 2015-08-28
        • 2011-11-26
        相关资源
        最近更新 更多