0

找到了多种与名为“帐户”的控制器匹配的类型。如果服务此请求的路由 ('{controller}/{action}/{id}') 未指定命名空间来搜索与请求匹配的控制器,则可能会发生这种情况。如果是这种情况,请通过调用在此处输入图像描述采用“namespaces”参数的“MapRoute”方法的重载来注册此路由。

4

1 回答 1

0

您有两个 AccountController 类。一进P247.ComplianceTracker.MVC.Controllers一进P247.CoachingTool.Mvc.Controllers

解析控制器的组件(依赖解析器)按照惯例执行此操作。这意味着它会查找从 Controller 继承的类,并遵循命名约定(当控制器设置为请求中的帐户时,AccountController)。两个库都有符合条件的类(或者在两个命名空间中都存在一个符合这个条件的类)。

所以你有几个选择:

  1. 重命名您的 AccountController 类之一
  2. 更改映射(如错误所示)

InSystem.Web.Mvc.RouteCollectionExtensions是一个MapRoute将命名空间列表作为参数的扩展:

public static Route MapRoute ( this RouteCollection routes, string name, string url, string[] namespaces );

因此,您的注册可以更改为以下内容:

routes.MapRoute (
      name: "Default",
      url: "{controller}/{action}/{id}",
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
      namespaces: new string [] { "P247.CoachingTool.Mvc.Controllers" }
  );

routes.MapRoute (
      name: "Default",
      url: "compliance/{controller}/{action}/{id}",
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
      namespaces: new string [] { "P247.ComplianceTracker.MVC.Controllers" }
  );

路由到 account/index 的请求将由 处理P247.CoachingTool.Mvc.Controllers.AccountController,对comliance/account/index 的请求由处理P247.ComplianceTracker.MVC.Controllers.AccountController

注意:网址确实会发生变化,因此您可能需要更改一些标记或对辅助函数的调用。

旁注:代码在我的机器上编译,我没有可比较的设置,所以您可能需要根据您的特定设置进行调整。

于 2013-10-14T11:12:38.040 回答