Ihre Routenkarte sieht wahrscheinlich so aus:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
Um jedoch mehrere Aktionen mit derselben http-Methode ausführen zu können, müssen Sie webapi über die folgende Route weitere Informationen bereitstellen:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
Beachten Sie, dass die routeTemplate jetzt eine Aktion enthält. Viele weitere Informationen hier: http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api
Aktualisieren:
Okay, jetzt, wo ich denke, ich verstehe, wonach Sie hier suchen, ist eine andere Einstellung dazu:
Möglicherweise benötigen Sie den Aktions-URL-Parameter nicht und sollten den Inhalt, nach dem Sie suchen, auf andere Weise beschreiben. Da Sie sagen, dass die Methoden Daten von derselben Entität zurückgeben, lassen Sie einfach die Parameter die Beschreibung für Sie übernehmen.
Zum Beispiel könnten Ihre beiden Methoden in Folgendes umgewandelt werden:
public HttpResponseMessage Get()
{
return null;
}
public HttpResponseMessage Get(MyVm vm)
{
return null;
}
Welche Art von Daten übergeben Sie im MyVm-Objekt? Wenn Sie nur Variablen über den URI übergeben können, würde ich vorschlagen, diesen Weg zu gehen. Andernfalls müssen Sie das Objekt im Hauptteil der Anforderung senden, und das ist nicht sehr HTTP von Ihnen, wenn Sie ein GET ausführen (es funktioniert jedoch, verwenden Sie einfach [FromBody] vor MyVm).
Hoffentlich zeigt dies, dass Sie mehrere GET-Methoden in einem einzelnen Controller haben können, ohne den Aktionsnamen oder sogar das Attribut [HttpGet] zu verwenden.