Маршрутизация атрибута в WEB API перезаписывает маршрут в Контроллере
Я пытаюсь добавить атрибут маршрутизации в ApiController следующим образом:
public class PhoneNumbersController : ApiController
{
// GET BY ID
public PhoneNumber GetById(int id)
{
return PhoneNumbersSelect(id)[0];
}
// GET BY ID TypeOFPhoneNumbers/Id
[Route("api/typeOfPhoneNumbers/{id}")]
public TypeOfPhoneNumber GetTypeOfPhoneNumberById(int id)
{
return TypeOfPhoneNumbersSelect(id)[0];
}
}
Мой конфиг выглядит так:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Я получаю 500 Ошибка при попытке вызвать api/phoneNumbers/1. Если я закомментирую функцию GetTypeOfPhoneNumbersId(), контроллер GetById() по умолчанию работает нормально. Что я делаю неправильно? Разве мне не разрешено объявлять уникальный маршрут в ApiController из-за способа настройки конфигурации?
Кроме того, как я только что узнал, вызов api/typeOfPhoneNumbers/1 возвращает ошибку 404, так что маршрутизация вообще не работает.
Спасибо за любую помощь!
2 ответа
Я полагаю, что вы пропускаете имя контроллера (phoneNumbers) в вашем маршруте, это рабочий код (я проверял его)
public class PhoneNumbersController : ApiController
{
// GET BY ID
[HttpGet]
public PhoneNumber GetById(int id)
{
return PhoneNumbersSelect(id)[0];
}
// GET BY ID TypeOFPhoneNumbers/Id
[HttpGet]
[Route("api/phoneNumbers/typeOfPhoneNumbers/{id:int}")]
public TypeOfPhoneNumber GetTypeOfPhoneNumberById(int id)
{
return TypeOfPhoneNumbersSelect(id)[0];
}
}
Не могли бы вы попытаться получить доступ к ресурсу TypeOFPhoneNumbers следующим образом: ~api/typeOfPhoneNumbers? Id=1