次のコントローラーを作成しています。
public FoosController : ApiController
{
public IQueryable Get()
{
return AnODataQueryableListOfFoos();
}
public void Delete(Guid id)
{
DeleteTheFooWithId(id);
}
public IQueryable<Bar> GetBars(Guid id)
{
var foo = GetFooById(id);
return AnODataQueryableListOfBarsForThisFoo(foo);
}
public IEnumerable ProjectedBars(Guid id)
{
var foo = GetFooById(id);
return foo.Qux
? OneProjectionOfBars(foo)
: AnotherProjectionOfBars(foo);
}
}
(バーのリストは、Foo の「コンテンツ」と考えることができます...)
次の URL を使用するつもりでした。
GET /api/Foos -> Get
GET /api/Foos/SOME_GUID/Bars -> GetBars
GET /api/Foos/SOME_GUID/ProjectedBars -> GetProjectedBars
DELETE /api/Foos/SOME_GUID -> Delete
とカスタム ルートの組み合わせをいくつか試してみました[ActionName]
が、常に競合または 404 が発生しました。
これを機能させる最も簡単な方法は何ですか? 可能であれば、ルートを一般的なもの (つまり、コントローラー固有のものはありません) に保ちたいと思います。他のコントローラーは、より標準的な/Stuff
アプローチStuff/id
を使用します。
また、私が URL を完全に悪用していることを誰かに指摘されても構いません。改善歓迎。