Su mapa de ruta es probablemente algo como esto:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
Pero para tener múltiples acciones con el mismo método http, debe proporcionar a webapi más información a través de la ruta de la siguiente manera:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
Tenga en cuenta que routeTemplate ahora incluye una acción. Mucha más información aquí: http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api
Actualizar:
Muy bien, ahora que creo que entiendo lo que estás buscando aquí es otra toma de esto:
Quizás no necesite el parámetro de URL de acción y deba describir los contenidos que busca de otra manera. Como está diciendo que los métodos están devolviendo datos de la misma entidad, simplemente deje que los parámetros hagan la descripción por usted.
Por ejemplo, sus dos métodos podrían convertirse en:
public HttpResponseMessage Get()
{
return null;
}
public HttpResponseMessage Get(MyVm vm)
{
return null;
}
¿Qué tipo de datos está pasando en el objeto MyVm? Si solo puede pasar variables a través del URI, sugeriría ir por esa ruta. De lo contrario, deberá enviar el objeto en el cuerpo de la solicitud y eso no es muy HTTP de su parte al hacer un GET (sin embargo, funciona, solo use [FromBody] delante de MyVm).
Con suerte, esto ilustra que puede tener múltiples métodos GET en un solo controlador sin usar el nombre de acción o incluso el atributo [HttpGet].