我創建以下控制器:多個GET操作
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);
}
}
(酒吧的列表,可以看作是富的「內容」 ...)
這是我打算請使用以下網址:
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
讓這項工作最簡單的方法是什麼?如果可能的話,我想保留我的路由通用(即沒有控制器特定的東西)。其他控制器使用更標準的方法。
我也開放給有人指出我完全濫用網址。改進歡迎。
你有沒有考慮屬性的路由?作爲內置支持的最新webapi。你可以在這裏閱讀更多關於它的信息:http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2 –
@KiranChalla I'我想過了。主要問題:尚不穩定。我也傾向於喜歡基於約定的實現。而且我願意讓我的設計適應標準慣例或稍微調整慣例。 –