找到了多种与名为“帐户”的控制器匹配的类型。如果服务此请求的路由 ('{controller}/{action}/{id}') 未指定命名空间来搜索与请求匹配的控制器,则可能会发生这种情况。如果是这种情况,请通过调用采用“namespaces”参数的“MapRoute”方法的重载来注册此路由。
1 回答
您有两个 AccountController 类。一进P247.ComplianceTracker.MVC.Controllers
一进P247.CoachingTool.Mvc.Controllers
。
解析控制器的组件(依赖解析器)按照惯例执行此操作。这意味着它会查找从 Controller 继承的类,并遵循命名约定(当控制器设置为请求中的帐户时,AccountController)。两个库都有符合条件的类(或者在两个命名空间中都存在一个符合这个条件的类)。
所以你有几个选择:
- 重命名您的 AccountController 类之一
- 更改映射(如错误所示)
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
。
注意:网址确实会发生变化,因此您可能需要更改一些标记或对辅助函数的调用。
旁注:代码在我的机器上编译,我没有可比较的设置,所以您可能需要根据您的特定设置进行调整。