La tua mappa del percorso è probabilmente qualcosa del genere:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
Ma per avere più azioni con lo stesso metodo http è necessario fornire a webapi ulteriori informazioni sul percorso in questo modo:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
Si noti che routeTemplate ora include un'azione. Molte più informazioni qui: http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api
Aggiornare:
Bene, ora che penso di capire cosa stai cercando qui è un'altra interpretazione di questo:
Forse non hai bisogno del parametro action url e dovresti descrivere i contenuti che stai cercando in un altro modo. Dal momento che stai dicendo che i metodi stanno restituendo dati dalla stessa entità, lascia che i parametri facciano la descrizione per te.
Ad esempio i tuoi due metodi potrebbero essere trasformati in:
public HttpResponseMessage Get()
{
return null;
}
public HttpResponseMessage Get(MyVm vm)
{
return null;
}
Che tipo di dati stai passando nell'oggetto MyVm? Se riesci a passare semplicemente le variabili attraverso l'URI, suggerirei di seguire questa strada. Altrimenti, dovrai inviare l'oggetto nel corpo della richiesta e non è molto HTTP da parte tua quando fai un GET (funziona però, usa [FromBody] davanti a MyVm).
Si spera che questo illustri che puoi avere più metodi GET in un singolo controller senza usare il nome dell'azione o anche l'attributo [HttpGet].