Twoja mapa trasy jest prawdopodobnie taka:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
Ale aby wykonać wiele działań przy użyciu tej samej metody http, musisz podać webapi więcej informacji na trasie:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
Zauważ, że routeTemplate zawiera teraz akcję. Wiele informacji tutaj: http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api
Aktualizacja:
W porządku, teraz, kiedy myślę, że rozumiem, o co tu chodzi, jest jeszcze jedno podejście:
Być może nie potrzebujesz parametru url akcji i powinieneś opisać treść, której szukasz w inny sposób. Ponieważ mówisz, że metody zwracają dane z tego samego obiektu, pozwól parametrom wykonać opis za Ciebie.
Na przykład dwie metody można przekształcić w:
public HttpResponseMessage Get()
{
return null;
}
public HttpResponseMessage Get(MyVm vm)
{
return null;
}
Jakie dane przekazujesz w obiekcie MyVm? Jeśli jesteś w stanie przepuścić zmienne przez URI, sugerowałbym pójście tą drogą. W przeciwnym razie musisz wysłać obiekt w treści żądania, a to nie jest zbyt HTTP podczas wykonywania GET (choć działa, po prostu użyj [FromBody] przed MyVm).
Mam nadzieję, że to pokazuje, że możesz mieć wiele metod GET w jednym kontrolerze bez użycia nazwy akcji lub nawet atrybutu [HttpGet].