2016-03-08 56 views
0

如何在Web API 2中使用两个完全相同的控制器。需要在Web API中使用完全相同的控制器2

我需要使用URL,如下所示。

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

这是错误

多种类型的发现匹配名为 '默认' 的控制器。 如果为请求 ('api/v1/{controller}/{id}')提供服务的路由找到多个使用 定义的控制器,并且名称空间不同(不受支持),则会发生这种情况。该 请求“缺省”发现下列匹配控制器: TestWebAPI.Controllers.DefaultController TestWebAPI.Controllers.v1.DefaultController

我如何才能做到这一点......基本上,我需要这个版本。

+1

你得到的错误是什么? – RePierre

+0

从我看到你试图访问这个链接:'mysite/api/version1/Contacts/get/2',但是路由注册了这个:'mysite/api/v1/Contacts/get/2' – Spluf

+1

可能的重复http://stackoverflow.com/questions/34715625/multiple-types-were-found-that-match-the-controller/34716586#34716586 –

回答

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

相关问题