Я использовал для размещения контроллеров в отдельном проекте библиотеки классов в Mvc Web Api. Раньше я добавлял следующую строку в мой веб-проект api global.asax для поиска контроллеров в отдельном проекте:
ControllerBuilder.Current.DefaultNamespaces.Add("MyClassLibraryProject.Controllers");
Мне никогда не приходилось выполнять какую-либо другую конфигурацию, кроме добавления вышеприведенной строки. Это всегда срабатывало для меня.
Однако я не могу использовать вышеуказанный метод, чтобы сделать то же самое в WebApi2. Это просто не работает. Проект WebApi2 по-прежнему пытается найти контроллеры в своей собственной папке диспетчера проектов.
- Предоставление небольшого сводного обновления через 2 месяца (Поскольку я начал щедрость на этом):
Я создал решение WebApiOne, у него есть 2 проекта, первый - проект WebApi, а второй - библиотека классов для контроллеров. Если я добавлю ссылку на проект библиотеки классов контроллеров в проект WebApi, все будет работать так, как ожидалось. то есть, если я перейду к http://mydevdomain.com/api/values, я могу увидеть правильный вывод.
Теперь я создаю второй проект под названием WebApiTwo, у него есть 2 проекта, первый - проект WebApi2, а второй - библиотека классов для контроллеров. Если я добавлю ссылку на проект библиотеки классов контроллеров в проект WebApi2, он не будет работать должным образом. то есть, если я перехожу к http://mydevdomain.com/api/values, я получаю "Тип не найден, который соответствует контроллеру с именем" values".
для первого проекта я вообще не выполняю никаких пользовательских настроек, у меня нет:
ControllerBuilder.Current.DefaultNamespaces.Add("MyClassLibraryProject.Controllers");
в моем global.asax, и я не реализовал какие-либо пользовательские решения, предложенные StrathWeb в двух своих блогах, поскольку я думаю, что он больше не применим; потому что все работает только путем добавления ссылки проекта контроллера на проект WebApi.
Итак, я бы ожидал, что все будут работать одинаково для WebApi2... но это не так. Кто-нибудь действительно пытался сделать это в WebAPi2?