在iis中部署asp.net MVC4应用程序时出错

时间:2013-10-14 11:01:03

标签: asp.net-mvc asp.net-mvc-4 iis-7

发现多个类型与名为“帐户”的控制器匹配。如果为此请求提供服务的路由('{controller} / {action} / {id}')未指定名称空间来搜索与请求匹配的控制器,则会发生这种情况。如果是这种情况,请通过调用带有'namespaces'参数的'MapRoute'方法enter image description here的重载来注册此路由。

1 个答案:

答案 0 :(得分:0)

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

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

所以你有几个选择:

  1. 重命名您的一个AccountController类
  2. 更改映射(如错误建议)
  3. 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会更改,因此您可能需要更改一些标记或调用辅助函数。

    附注:代码在我的机器上编译,我没有类似的设置,你可能需要调整到你的特定设置。