Seu mapa de rotas provavelmente é algo como isto:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
Mas, para ter várias ações com o mesmo método http, você precisa fornecer à webapi mais informações através da rota, da seguinte maneira:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
Observe que o routeTemplate agora inclui uma ação. Muito mais informações aqui: http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api
Atualizar:
Tudo bem, agora que acho que entendi o que você procura, aqui está outra ideia:
Talvez você não precise do parâmetro action url e descreva o conteúdo que procura depois de outra maneira. Como você está dizendo que os métodos estão retornando dados da mesma entidade, deixe os parâmetros fazer a descrição para você.
Por exemplo, seus dois métodos podem ser transformados em:
public HttpResponseMessage Get()
{
return null;
}
public HttpResponseMessage Get(MyVm vm)
{
return null;
}
Que tipo de dados você está passando no objeto MyVm? Se você conseguir passar variáveis através do URI, sugiro seguir esse caminho. Caso contrário, você precisará enviar o objeto no corpo da solicitação e isso não é muito HTTP da sua parte ao fazer um GET (mas funciona, basta usar [FromBody] na frente do MyVm).
Espero que isso ilustre que você pode ter vários métodos GET em um único controlador sem usar o nome da ação ou mesmo o atributo [HttpGet].