WebAPI На контроллере не найдено никаких действий
У меня возникла ошибка - на контроллере "Действие" не найдено никаких действий, соответствующих запросу.
URL-адрес http://localhost:37331/api/action/FindByModule/1
.
Используемая маршрутизация
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Контроллер:
public class ActionController : ApiController
{
private IActionRepository repository = null;
[HttpGet]
[ActionName("All")]
public IEnumerable<JsonAction> All()
{
return from action in this.repository.Get()
select new JsonAction
{
ID = action.ID,
Text = action.Text.Trim(),
Description = action.Description.Trim(),
};
}
[HttpGet]
[ActionName("FindByModule")]
public IEnumerable<JsonAction> FindByModule(Int64 moduleId)
{
return from action in this.repository.FindByModule(moduleId)
select new JsonAction
{
ID = action.ID,
Text = action.Text.Trim(),
Description = action.Description.Trim(),
};
}
}
Ответы
Ответ 1
Это связано с тем, что существует несоответствие имени параметра. С вашего маршрута значение 1 назначается параметру с именем id
, и ваше действие ищет параметр с именем moduleId
.
Первый вариант - изменить маршрут следующим образом:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{moduleId}",
defaults: new { moduleId = RouteParameter.Optional }
);
Во-вторых, вы должны изменить свой URL следующим образом:
http://localhost:37331/api/action/FindByModule?moduleId=1
Итак, имя параметра соответствует.