我有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);
}
}
答案 0 :(得分:1)
在我看来,这里优雅的解决方案是,以不同的方式命名您的ApiControllers。如果他们不做同样的事情,请在控制器名称中反映出来。如果他们做同样的事情,那么你不需要单独的控制器。
另一种解决方案可能是让一个控制器具有不同的操作,命名方式不同。
鉴于问题的抽象性,很难判断为什么这不是解决问题的优雅方法。也许如果您告诉我们控制器的名称,它们之间的区别,以及它们在不同区域的原因,有人可以为您提供更合适的答案。