0

我正在使用接近 aspnetwebstack Codeplex 项目的最新位(如果有人感兴趣,2012-05-09 的 4592e2f63c55)开发一个 API。

我有以下路线:

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

而我目前正在尝试做的是实现 get single 和 get all in an ApiController. 用于测试的 Get all 方法如下:

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

而get单曲目前如下:

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 的最新版本)?

4

1 回答 1

2

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

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

于 2012-05-14T18:31:38.123 回答