Votre feuille de route est probablement quelque chose comme ça :
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
Mais pour avoir plusieurs actions avec la même méthode http, vous devez fournir à webapi plus d'informations via la route comme ceci :
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
Remarquez que le routeTemplate comprend maintenant une action. Beaucoup plus d'informations ici : http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api
Mise à jour :
Très bien, maintenant que je pense avoir compris ce que vous recherchez, voici une autre façon de voir les choses :
Peut-être n'avez-vous pas besoin du paramètre url de l'action et devriez-vous décrire le contenu que vous recherchez d'une autre manière. Puisque vous dites que les méthodes renvoient des données de la même entité, laissez les paramètres faire la description pour vous.
Par exemple vos deux méthodes pourraient être transformées en :
public HttpResponseMessage Get()
{
return null;
}
public HttpResponseMessage Get(MyVm vm)
{
return null;
}
Quel type de données passez-vous dans l'objet MyVm ? Si vous pouvez simplement passer des variables à travers l'URI, je vous suggère de suivre cette voie. Sinon, vous devrez envoyer l'objet dans le corps de la requête et ce n'est pas très HTTP de votre part lorsque vous faites un GET (cela fonctionne cependant, utilisez simplement [FromBody] devant MyVm).
Nous espérons que cela montre que vous pouvez avoir plusieurs méthodes GET dans un seul contrôleur sans utiliser le nom de l'action ou même l'attribut [HttpGet].