Ответ 1
Маршрут по умолчанию не включает действие.
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Он выбирает действия на основе контроллера, HTTP-глагола и параметра или отсутствия параметра на маршруте. Таким образом, он находит правильный контроллер и ищет действие GET без параметров. Он находит два.
Вы должны добавить дополнительный маршрут, который включает действие. Это делается либо с помощью маршрутизации, основанной на атрибутах, как упоминается Kiran, либо на основе маршрутизации на основе соглашения. Для маршрутизации на основе протокола маршрут обычно помещается в метод Application_start()
WebApiConfig.cs
. Более конкретные маршруты идут до общих маршрутов, поэтому ваши маршруты будут выглядеть примерно так:
config.Routes.MapHttpRoute(
name: "ApiWithAction",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);