0

aspnetwebstack Codeplexプロジェクトの最新ビットに近いものを使用してAPIを開発しています(興味のある方は2012-05-09の4592e2f63c55)。

私は次のルートを持っています:

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

そして、私が現在やろうとしているのは、getsingleとgetallinを実装することですApiController。テスト用のGetallメソッドは次のとおりです。

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

そして、getsingleは現在次のとおりです。

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

ただし、ルーティングは常にGetsingleメソッドを選択しています。

$ 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]たが、それでも単一のメソッドが選択されます。

私は何かを完全に見逃していますか、それともこれを別の方法で行う必要がありますか(私が見る例のほとんどはベータビットに関連しているように見え、CodePlexの最近のバージョンではありません)?

4

1 に答える 1

2

これをデフォルトの id パラメータに使用してみてください:

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

于 2012-05-14T18:31:38.123 に答える