2012-05-14 53 views
0

我正在開發一個API,使用接近aspnetwebstack Codeplex項目(如果任何人感興趣的2012-05-09 4592e2f63c55)的最新比特。獲取單個並獲取ApiController上的所有方法

我有以下途徑:

context.Routes.MapHttpRoute("SiteSpecific", "Api/{controller}/{customerId}/{siteToken}/{id}", 
       new { id = UrlParameter.Optional }); 

什麼我目前正試圖做的就是實現獲得單和獲取所有在ApiController。在獲取所有的方法,進行測試如下:

public IEnumerable<EditChatResponse> Get(string customerId, string siteToken) 
{ 
    return new []{new EditChatResponse{Template = "Get All"}, }; 
} 

而獲得單目前以下:

public EditChatResponse Get(string customerId, string siteToken, string id) 
{ 
    return new EditChatResponse {Template = "Get Single"}; 
} 

然而,路由總是選擇找一個方法:

$ curl -i -H "Accept: applicaiton/json" http://localhost/api/chatresponse/a/b 
HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/7.5 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Mon, 14 May 2012 18:06:26 GMT 
Content-Length: 66 

{"Id":0,"Template":"Get Single","Inherited":false,"Enabled":false} 


$ curl -i -H "Accept: applicaiton/json" http://localhost/api/chatresponse/a/b/c 
HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/7.5 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Mon, 14 May 2012 18:06:28 GMT 
Content-Length: 66 

{"Id":0,"Template":"Get Single","Inherited":false,"Enabled":false} 

我嘗試將所有方法重命名爲GetAll,正如我在一些示例中所看到的,使用[HttpGet]來裝飾它,但它仍然選擇單一方法。

我完全錯過了什麼,或者我是否需要以這種不同的方式去做(我看到的大多數示例看起來與beta版相關,而不是CodePlex的最新版本)?

回答

2

嘗試使用這個默認ID參數:

新{ID = System.Web.Http.RouteParameter.Optional}