如何在Web API 2中使用两个相同的控制器。
我需要使用以下网址。
mysite/api/Contacts/get/2
和
mysite/api/v1/Contacts/get/2
但如果我使用单独的文件夹,则会出错。
我的WebApiConfig.cs就像这样
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi2",
routeTemplate: "api/v1/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
这是错误
找到了多个匹配名为“default”的控制器的类型。 如果为此请求提供服务的路由,则会发生这种情况 ('api / v1 / {controller} / {id}')找到了多个定义的控制器 相同的名称但不同的名称空间,不受支持。该 'default'请求找到以下匹配的控制器: TestWebAPI.Controllers.DefaultController TestWebAPI.Controllers.v1.DefaultController
我如何实现这一目标?...基本上我需要这个用于版本控制。
答案 0 :(得分:0)
如果为此请求提供服务的路由(' api / v1 / {controller} / {id}')发现多个控制器使用相同名称但名称空间不同而不支持,则会发生这种情况
这意味着您有两个名为DefaultController
的不同控制器(如您所述)。
如果要使用相同的控制器同时提供两个网址,只需删除v1
文件夹中的网址即可。如果要为每个控制器提供每个URL,则应为每个控制器指定命名空间。
var r = routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
r.DataTokens["Namespaces"] = new string[] {"Foo"};
此blog post中的详细信息。