2013-10-14 128 views
0

发现多个类型与名为“Account”的控制器相匹配。如果为该请求提供服务的路由('{controller}/{action}/{id}')没有指定命名空间来搜索与该请求匹配的控制器,就会发生这种情况。如果是这种情况,请通过调用“MapRoute”方法enter image description here的重载来注册该路由,该方法采用'namespaces'参数。在iis中部署asp.net MVC4应用程序时出错

回答

0

您有两个AccountController类。一个在P247.ComplianceTracker.MVC.Controllers,另一个在P247.CoachingTool.Mvc.Controllers

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

所以,你有几种选择:

  1. 重命名你的AccountController类
  2. 变化映射的一个(因为错误提出)

System.Web.Mvc.RouteCollectionExtensionsMapRoute扩展以列表名称空间作为参数:

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 /帐号/指数。

注意:网址会发生变化,因此您可能需要更改某些标记或调用辅助函数。附注:代码在我的机器上编译,我没有类似的设置,你可能需要根据你的具体设置进行调整。

相关问题