我正在使用aspnetwebstack Codeplex项目(2012-05-09中的4592e2f63c55,如果有人感兴趣)的最新位开发API。
我有以下路线:
context.Routes.MapHttpRoute("SiteSpecific", "Api/{controller}/{customerId}/{siteToken}/{id}",
new { id = UrlParameter.Optional });
我目前要做的是实现get single和get ApiController
。 Get all方法用于测试如下:
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"};
}
但是,路由总是选择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}
我尝试将Get all方法重命名为GetAll
,正如我在一些示例中看到的那样,用[HttpGet]
进行装饰,但它仍然选择单一方法。
我是否完全遗漏了某些内容,或者我是否需要以不同的方式解决这个问题(我看到的大部分示例都与beta位相关,而不是CodePlex的最新版本)?
答案 0 :(得分:2)
尝试将其用作默认id参数:
new {id = System.Web.Http.RouteParameter.Optional}