6
私はすべてのAPIエンドポイントを表示し、私が必要とするスタイルでそれらを表示するためのAPIヘルプページを手に入れようとしています。ここで.Net Web API Routing&Help Page
は私のルートです:ここでは
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
:
例えば、私は終わる私が欲しいとき
PUT v1/Orgs?orgId={orgId}
:
GET v1/Orgs/{orgId}
または私はで終わる
PUT v1/Orgs/{orgId}
どのような組み合わせであっても、私はそれらを欲しいと思っています。どんな助けでも大歓迎です!
私は、 'GET v1/Orgs/{orgId}'ルートが 'Get(string orgId)'と 'Descendants(string orgId)'との間に矛盾があると思います。実際には、 '' v1/Orgs/{orgId} 'を取得しようとする可能性があり、「複数のアクションが見つかりました...」などのエラーが表示されます。 –
このようなネストされたルートを定義すると、ネストされたリソースを別のコントローラとして使用する場合、あなたのケースでは 'DescendantsController'になります。そうすれば、必要に応じて子孫に完全な休憩APIを持たせることができます。おそらくそれはあなたが探索できる回避策です... – Tallmaris
私は自分のコントローラに子孫を移動することを考えていましたが、それらもorgであるので、同じコントローラにそれらを保持して重複したコードを保存したかったのです。それは当分の間、最善の回避策かもしれないようです。私はそれを試して、それが動作するかどうかを確認します。 –