Ваша карта маршрута, вероятно, примерно такая:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
Но чтобы иметь несколько действий с одним и тем же методом http, вам нужно предоставить webapi больше информации по маршруту, как показано ниже:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
Обратите внимание, что routeTemplate теперь включает в себя действие. Много дополнительной информации здесь: http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api
Обновить:
Хорошо, теперь, когда я думаю, что я понимаю, что вы после здесь, еще один взгляд на это:
Возможно, вам не нужен параметр action url, и вы должны описать содержимое, которое вам нужно, другим способом. Поскольку вы говорите, что методы возвращают данные из одной и той же сущности, просто позвольте параметрам описать вас.
Например, ваши два метода могут быть превращены в:
public HttpResponseMessage Get()
{
return null;
}
public HttpResponseMessage Get(MyVm vm)
{
return null;
}
Какие данные вы передаете в объект MyVm? Если вы можете просто передавать переменные через URI, я бы предложил пойти по этому пути. В противном случае вам нужно будет отправить объект в теле запроса, и это не очень HTTP с вашей стороны при выполнении GET (хотя это работает, просто используйте [FromBody] перед MyVm).
Надеемся, что это показывает, что вы можете иметь несколько методов GET в одном контроллере, не используя имя действия или даже атрибут [HttpGet].