Маршрутизация атрибута в 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

Другие вопросы по тегам