Web API 2: добавлен новый контроллер, он не регистрируется?

Как хорошо здесь провести время... (Web API 2.1, .NET 4.5.1)

У меня был один контроллер, который работал отлично:

[RoutePrefix("v1/members")]
public class MembersController : ApiController
{
    [Route("{id}")]
    public Member Get(string id)
    {
        DataGateway g = new DataGateway();

        return g.GetMember(id);
    }
}

Работает по назначению и желанию, например:

/v1/members/12345

Но сегодня я добавил новый контроллер, и он, похоже, вообще не зарегистрирован и не распознан. Он не добавляется на страницы справки и возвращает ошибку 404 Not Found при попытке доступа к нему:

[RoutePrefix("v1/test")]
public class Test : ApiController
{
    [Route("{id}")]
    public string Get(int id)
    {
        return "value";
    }
}

Как я уже говорил, новый контроллер не отображается на страницах справки и возвращает ошибку 404:

/v1/test/12345

Скриншот

Что я делаю не так?

ОТРЕДАКТИРОВАНО ДОБАВИТЬ:

Я установил трассировку, и она, кажется, даже не попала в нее. Первый контроллер работает нормально и показывает трассировку, новый тестовый контроллер не показывает никакой информации о трассировке.

РЕДАКТИРОВАТЬ 2:

Обновлен код примера, чтобы лучше соответствовать моему реальному коду, который все время был проблемой.


person Jeff Guillaume    schedule 28.03.2014    source источник
comment
Пробовали ли вы наложить ограничение на маршрут? ([Route("{id:int}")])   -  person Simon Belanger    schedule 28.03.2014
comment
Идентификатор должен принимать строки (не спрашивайте), но я попробую это для целей тестирования. По какой причине вы это предложили?   -  person Jeff Guillaume    schedule 28.03.2014
comment
Поскольку параметр id является целым числом. (Я говорил о вашем втором маршруте, а не о первом)   -  person Simon Belanger    schedule 28.03.2014


Ответы (1)


Проблема была здесь:

[RoutePrefix("v1/test")]
public class Test : ApiController

Изменился на:

[RoutePrefix("v1/test")]
public class TestController : ApiController

Кажется, всемогущее важное слово «Контроллер» должно быть в имени класса, чтобы волшебство произошло.

person Jeff Guillaume    schedule 28.03.2014
comment
Просто чтобы добавить сюда некоторую предысторию, Web API и MVC основаны на соглашениях, поэтому имена папок и классов становятся очень важными. Например, в MVC TestController также требуется папка Views/Test для хранения ваших файлов Razor, и за кулисами .NET автоматически узнает, что они идут вместе. И в веб-API, и в MVC контроллеры должны быть правильно названы (например, MyThingController вместо MyThing), чтобы сайт знал, как применять маршруты. - person Joisey Mike; 12.04.2017