不同MVC区域中的多个API控制器共享相同的命名空间

时间:2014-01-27 16:22:03

标签: c# asp.net-mvc

我有2个区域,其中2个API控制器具有相同的AI控制器名称,但名称不同,并且通过2个不同的MapHttpRoute()调用及其唯一的名称和路由进行配置。他们也成功编译没有问题。但是,两者都有匹配的动作方法,当我调用一个时,我会回到下面的例外。

从异常消息中可以清楚地看到它不受支持但是有一个优雅的分辨率,所以我不必将我的API控制器命名为唯一的命名空间,而不是单独的名称空间吗?

例外:

  

找到了与命名控制器匹配的多个类型   'SomethingApi'。如果为此服务的路由可能会发生这种情况   请求('route-one / api / something / {action}')找到了多个控制器   使用相同的名称但不同的命名空间定义,但不是   支撑。

路线示例:

public static void RegisterApiRoutes(HttpConfiguration config)
{
    // URL: /route-one/api/something/

    config.Routes.MapHttpRoute(
        "RoutOne.Api.Something",
        "route-one/api/something/{action}",
        new { controller = "SomethingApi" }
    );
}

两个名称空间中的路由都是从项目的WebApiConfig中调用的:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        RouteOneAreaRegistration.RegisterApiRoutes(config);
        RouteTwoAreaRegistration.RegisterApiRoutes(config);
    }
}

1 个答案:

答案 0 :(得分:1)

在我看来,这里优雅的解决方案,以不同的方式命名您的ApiControllers。如果他们不做同样的事情,请在控制器名称中反映出来。如果他们做同样的事情,那么你不需要单独的控制器。

另一种解决方案可能是让一个控制器具有不同的操作,命名方式不同。

鉴于问题的抽象性,很难判断为什么这不是解决问题的优雅方法。也许如果您告诉我们控制器的名称,它们之间的区别,以及它们在不同区域的原因,有人可以为您提供更合适的答案。