Staram się uzyskać stronę pomocy API, aby pokazać wszystkie moje punkty końcowe API i pokazać je w pożądanym przeze mnie stylu..Net Web API Routing i pomoc Strona
Oto moje trasy:
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" });
Oto wszystkie moje metody kontrolera:
[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)
A oto punkty końcowe że strona help Wyświetla:
GET v1/Orgs
POST v1/Orgs
PUT v1/Orgs/{orgId}
DELETE v1/Orgs/{orgId}
GET v1/Orgs/{orgId}/Descendants
jak ty można zobaczyć, na stronie pomocy brakuje następującego punktu końcowego:
GET v1/Orgs/{orgId}
Próbowałem tak wielu różnych permutacji routingu, które utraciłem. Niezależnie od tego, co wypróbuję, zawsze otrzymuję informację, że brakuje niektórych punktów końcowych lub są one "nieprawidłowo" sformatowane.
Na przykład, ja skończyć z:
GET v1/Orgs/{orgId}/Get
kiedy chcę:
GET v1/Orgs/{orgId}
lub I skończyć z:
PUT v1/Orgs?orgId={orgId}
kiedy chcę:
PUT v1/Orgs/{orgId}
Bez względu na to, jaką kombinację próbuję, nie mogę sprawić, że będą je wszystkie tak, jak chcę. Każda pomoc będzie doceniona!
Zgaduję, że HelpPage uważa, że trasa 'GET v1/Orgs/{orgId}' ma konflikty między 'Get (string orgId)' i 'Descendants (string orgId)'. Właściwie mógłbyś prawdopodobnie spróbować wysłać polecenie 'GET v1/Orgs/{orgId}' i powinien zobaczyć błąd podobny do powiedzenia "Wiele akcji zostało znalezione ..." itd. –
Kiedy definiuję takie zagnieżdżone trasy, zwykle ustawiam zagnieżdżone zasoby jako inny kontroler, w twoim przypadku byłby to "DescendantsController". W ten sposób możesz mieć pełny odpoczynek API na potomkach, jeśli to konieczne. Być może jest to obejście, które możesz zbadać ... – Tallmaris
Myślałem o przeniesieniu potomków do ich własnego kontrolera, ale ponieważ oni również są organizacjami, chciałem zatrzymać ich w tym samym kontrolerze, aby zaoszczędzić na powielonym kodzie. Wygląda na to, że może to być najlepszym rozwiązaniem na razie. Spróbuję i zobaczę, czy to działa. –