获取单个并获取ApiController上的所有方法

时间:2012-05-14 18:12:11

标签: asp.net-mvc-routing asp.net-web-api

我正在使用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的最新版本)?

1 个答案:

答案 0 :(得分:2)

尝试将其用作默认id参数:

  

new {id = System.Web.Http.RouteParameter.Optional}