MVC4路由包含具有相同名称的控制器的2个区域

时间:2012-05-14 09:26:01

标签: asp.net-mvc

我在mvc4应用程序中有2个区域,并且已经为每个区域注册了命名空间。

 public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Intergration_default",
            "Intergration/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional },
              constraints: null,
            namespaces: new[] { "WebApplication.Areas.Intergration.Controllers" }

        );

    } 
    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Vend_default",
            "Vend/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional},
              constraints: null,
            namespaces: new[] { "WebApplication.Areas.MyController.Controllers" }

        );

我可以访问Intergration / MyController但是当我尝试访问MyController时出现错误

  

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

我做错了什么?我需要在global.asax

中做一些额外的事情吗?

1 个答案:

答案 0 :(得分:2)

根据您提供的代码/说明,听起来可能有几件事情:

  1. 您在根控制器命名空间中(即,在项目根目录中的Controllers文件夹中,而不是在某个区域中)与另一个没有约束的区域发生控制器名称冲突。
  2. 更有可能的是,Vend的第二个区域注册看起来像是一个不正确的命名空间。而不是WebApplication.Areas.MyController.Controllers它应该是WebApplication.Areas.Vend.Controllers。我敢打赌,根控制器命名空间中有一个控制器,它与Vend区域中的某个控制器名称共享。