Мапа маршруту, мабуть, приблизно така:
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-action/routing-in-aspnet-web-api
Оновлення:
Добре, тепер, коли я думаю, що я розумію, що ти шукаєш тут, - це ще одна справа:
Можливо, вам не потрібен параметр URL-адреси дії, і слід описати вміст, який ви шукаєте, по-іншому. Оскільки ви говорите, що методи повертають дані з тієї ж сутності, тоді просто дозвольте параметрам робити опис для вас.
Наприклад, ваші два методи можна перетворити на:
public HttpResponseMessage Get()
{
return null;
}
public HttpResponseMessage Get(MyVm vm)
{
return null;
}
Які дані ви передаєте в об’єкт MyVm? Якщо ви можете просто передати змінні через URI, я б запропонував пройти цей маршрут. В іншому випадку вам потрібно буде надіслати об’єкт в тілі запиту, і це не дуже HTTP з вас, коли ви робите GET (він працює, однак, просто використовуйте [FromBody] перед MyVm).
Сподіваємось, це ілюструє, що ви можете мати кілька методів GET в одному контролері, не використовуючи ім'я дії або навіть атрибут [HttpGet].