MVC4 路由 2 个包含同名控制器的区域



我在 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" }
        );

我可以访问集成/我的控制器,但是当我尝试访问我的控制器时,我收到一个错误

发现多个类型与名为"mycontroller"的控制器匹配。如果为此请求提供服务的路由("{控制器}/{操作}/{id}")未指定命名空间来搜索与请求匹配的控制器,则可能会发生这种情况。如果是这种情况,请通过调用采用"命名空间"参数的"MapRoute"方法的重载来注册此路由。

我做错了什么?我需要在global.asax中做一些额外的事情吗?

根据您提供的代码/描述,听起来可能是几件事:

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

最新更新