Routing Web API - api / {controller} / {action} / {id} „dysfunctions” api / {controller} / {id}
Mam domyślną trasę w Global.asax:
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
Chciałem móc celować w określoną funkcję, więc stworzyłem inną trasę:
RouteTable.Routes.MapHttpRoute(
name: "WithActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
W moim kontrolerze mam:
public string Get(int id)
{
return "object of id id";
}
[HttpGet]
public IEnumerable<string> ByCategoryId(int id)
{
return new string[] { "byCategory1", "byCategory2" };
}
Powołanie.../api/records/bycategoryid/5
da mi to, czego chcę. Jednak dzwoni.../api/records/1
da mi błąd
Znaleziono wiele działań odpowiadających żądaniu: ...
Rozumiem, dlaczego tak jest - trasy po prostu definiują, które adresy URL są poprawne, ale jeśli chodzi o dopasowanie funkcji, obaGet(int id)
iByCategoryId(int id)
meczapi/{controller}/{id}
, które są Czymmyli ramy.
Co muszę zrobić, aby ponownie uruchomić domyślną trasę API i zachować tę z{action}
? Myślałem o stworzeniu innego kontrolera o nazwieRecordByCategoryIdController
aby dopasować domyślną trasę API, o którą bym prosił.../api/recordbycategoryid/5
. Uważam jednak, że jest to „brudne” (a więc niezadowalające) rozwiązanie. Szukałem odpowiedzi na ten temat i żadnego tutoriala na temat korzystania z trasy{action}
nawet wspomina o tym problemie.