发现多个类型与名为“帐户”的控制器匹配。如果为此请求提供服务的路由('{controller} / {action} / {id}')未指定名称空间来搜索与请求匹配的控制器,则会发生这种情况。如果是这种情况,请通过调用带有'namespaces'参数的'MapRoute'方法的重载来注册此路由。
答案 0 :(得分:0)
您有两个AccountController类。一个位于P247.ComplianceTracker.MVC.Controllers
,另一个位于P247.CoachingTool.Mvc.Controllers
。
解析控制器的组件(Dependency Resolver)按惯例执行此操作。这意味着它查找一个继承自Controller的类,并遵循命名约定(当控制器设置为请求中的帐户时,AccountController)。两个库都有符合条件的类(或者两个名称空间中都存在符合此条件的类)。
所以你有几个选择:
在System.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" }
);
路由到帐户/索引的请求将由P247.CoachingTool.Mvc.Controllers.AccountController
处理,P247.ComplianceTracker.MVC.Controllers.AccountController
对comliance / account / index的请求。
注意:Url会更改,因此您可能需要更改一些标记或调用辅助函数。
附注:代码在我的机器上编译,我没有类似的设置,你可能需要调整到你的特定设置。