【问题标题】:Multiple API controllers in different MVC Areas share the same namespace不同 MVC 区域中的多个 API 控制器共享同一个命名空间
【发布时间】:2014-01-27 16:22:03
【问题描述】:

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

从异常消息中可以清楚地看出它不受支持,但是否有一个优雅的解决方案,这样我就不必为我的 API 控制器命名,尽管它们位于不同的命名空间中?

例外:

找到了多个与名为的控制器匹配的类型 'SomethingApi'。如果服务于此的路由可能会发生这种情况 request ('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);
    }
}

【问题讨论】:

  • 你能显示两个不同区域的路线注册吗?似乎 MVC 认为您正在注册两个区域/路线相同...
  • 在哪里调用 RegisterApiRoutes()?
  • 您是否尝试为 MapHttpRoute 指定区域名称?
  • @Jason - 我可以保证两条路线都是独一无二的,它们有唯一的名称和路线。
  • @KevinBrechbühl - 请参阅修正以获取您的答案

标签: c# asp.net-mvc


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,关键是他们做的事情非常相似,只是在公司内的不同业务部门。所以业务单元名称的区别体现在命名空间(并通过MVC区域结构)。其他一切都根据其执行的功能命名。不过我明白你的意思。
  • 能否将业务单位名称或其他id设为路由参数/动作方法参数? "api/something/{action}/{businessUnit}"?
  • 我喜欢你的想法,但业务单元是之前包含在细分中的,实际上业务单元是由 MVC 区域反映的。它只是发生在这种情况下,其中两个在各自的域上执行非常相似的操作。
猜你喜欢
  • 2021-09-22
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 2014-08-16
  • 1970-01-01
相关资源
最近更新 更多