2014-01-27 61 views
0

我有2个地区与具有相同的AI控制器名称2 API控制器,但不同的命名空间,并且通过2个不同的MapHttpRoute(配置)以其独特的名字和呼叫路由。他们也成功编译没有问题。但是,在两者中都有匹配的操作方法,并且当我拨打一个电话时,我会回到下面的例外。多个API控制器共享同一个命名空间

这是从异常消息明确指出它不支持,而是有一种优雅的分辨率,所以我没有,尽管在不同的命名空间是唯一的名字我的API控制器?

例外:

多种类型的发现命名 'SomethingApi' 控制器匹配。这可能发生,如果这 请求(“路线一/ API /事/ {行动}”)找到具有相同名称但不同的命名空间,这是不支持 定义多个控制器 的路线。

路线例如:

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); 
    } 
} 
+0

你可以同时显示两个独立区域的路线注册吗?看起来好像MVC认为你注册了两个区域/路线一样... – Jason

+0

你在哪里调用RegisterApiRoutes()? –

+0

您是否试图为MapHttpRoute指定区域名称? – Fals

回答

1

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

另一种解决办法是有一个控制器的两个不同的动作,不同的命名的。

这是很难衡量这是为什么不给解决你的问题的抽象性问题的一个优雅的方式。也许如果你告诉我们管制员的名字,他们有什么不同,他们为什么在不同的地方,有人可以为你提供一个更合适的答案。

+0

谢谢,他们做的事情非常相似,只是在公司内的不同业务部门。所以业务单位名称的差异体现在名称空间中(并通过MVC区域结构)。其他一切都根据其执行的功能命名。尽管我明白你的观点。 – Bern

+0

您可以将业务单位名称或其他ID作为路由参数/操作方法参数吗? ' “API /事/ {行动}/{} businessUnit”'? – danludwig

+0

我喜欢你的想法,但业务部门早些时候被包含在该部分中,事实上,业务部门被MVC领域所反映。它只是在这种情况下发生的,其中两个在其各自的域上执行非常类似的操作。 – Bern

相关问题