6
我很努力地讓API幫助頁面顯示我所有的API端點,並以我想要的樣式顯示它們。.Net Web API路由和幫助頁面
這裏是我的路線:
config.Routes.MapHttpRoute("Orgs", "v1/Orgs/{orgId}",
new { controller = "Orgs", orgId = RouteParameter.Optional });
config.Routes.MapHttpRoute("OrgDescendants", "v1/Orgs/{orgId}/Descendants",
new { controller = "Orgs", action = "OrgDescendants" });
這裏是我所有的控制器方法:
[HttpGet]
public IEnumerable<Org> GetAllOrgs()
[HttpGet]
public Org Get(string orgId)
[HttpGet]
[ActionName("OrgDescendants")]
public List<Org> Descendants(string orgId)
[HttpPost]
public HttpResponseMessage Post(Org org)
[HttpPut]
public HttpResponseMessage Put(string orgId, Org org)
[HttpDelete]
public void Delete(string orgId)
這裏是端點幫助頁面顯示:
GET v1/Orgs
POST v1/Orgs
PUT v1/Orgs/{orgId}
DELETE v1/Orgs/{orgId}
GET v1/Orgs/{orgId}/Descendants
正如你可以看到,幫助頁面缺少以下端點:
GET v1/Orgs/{orgId}
我已經嘗試了很多不同的路由排列,我失去了軌道。無論我嘗試什麼,我總是會丟失一些端點或錯誤地格式化。
例如,我結束了:
GET v1/Orgs/{orgId}/Get
時,我想:
GET v1/Orgs/{orgId}
或我結束了:
PUT v1/Orgs?orgId={orgId}
時,我想:
PUT v1/Orgs/{orgId}
無論我嘗試什麼樣的組合,我似乎都無法讓我們想要它們。任何幫助將非常感激!
我在猜測HelpPage認爲'GET v1/Orgs/{orgId}'路線在'Get(string orgId)'和'Descendants(string orgId)'之間有衝突。實際上,你可能試着向'GET v1/Orgs/{orgId}'發出一個請求,並且會看到一個錯誤,比如說「發現了多個動作...」等。 –
當我定義這樣的嵌套路由時,我通常會設置嵌套的資源作爲不同的控制器,你的情況下它將是'DescendantsController'。這樣,如果需要,您可以在Descendants上擁有完整的休息API。也許這是一個可以探索的解決方法... – Tallmaris
我一直在考慮將後代移動到他們自己的控制器,但既然他們是組織,我也想讓他們在同一個控制器中保存重複的代碼。看起來這可能是目前最好的解決方法。我會試一試,看看它是否有效。 –