Votre plan de route ressemble probablement à ceci:
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 l'itinéraire comme suit:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
Notez que le routeTemplate inclut désormais une action. Beaucoup plus d'informations ici: http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api
Mettre à jour:
Bon, maintenant que je pense que je comprends ce que vous cherchez, voici une autre prise de vue à ce sujet:
Vous n'avez peut-être pas besoin du paramètre action url et devez décrire le contenu que vous recherchez d'une autre manière. Puisque vous dites que les méthodes retournent des données de la même entité, laissez simplement 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 transmettez-vous dans l'objet MyVm? Si vous pouvez simplement passer des variables via l'URI, je vous suggère de suivre cette voie. Sinon, vous devrez envoyer l'objet dans le corps de la demande et ce n'est pas très HTTP de vous lorsque vous faites un GET (cela fonctionne cependant, utilisez simplement [FromBody] en face de MyVm).
J'espère que cela illustre 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].