Могу ли я использовать контроллер и ApiController для одного и того же? - программирование
Подтвердить что ты не робот

Могу ли я использовать контроллер и ApiController для одного и того же?

Я только начал использовать VS 2012 RC, и я создаю веб-приложение ASP.NET MVC 4, в котором я планирую предоставить как пользовательский интерфейс на основе HTML, так и интерфейс программирования на основе WebApi.

Для моего веб-сайта HTML у меня есть контроллер и просмотр для каждой из моих моделей (MVC!), а маршрутизация работает "по соглашению", так что, например, URL /client подключается к моему ClientController, Мой ClientController происходит от Controller.

Для моего API я создам новые контроллеры, которые выводятся из ApiController. Я, естественно, хочу, чтобы мои URL-адреса API были похожи на мои URL-адреса HTML, поэтому я хотел бы, чтобы информация о клиенте была доступна в /api/client. Тем не менее, с помощью маршрутизации по соглашению, это предполагает, что мне нужен ApiController с именем ClientController. И у меня уже есть класс ClientController.

Как я могу справиться с этим? Нужна ли мне обычная маршрутизация? Я помещал классы API в другое пространство имен, чтобы я мог дать им одно и то же имя?

Обновление: Этот вопрос, похоже, говорит о том, что мне нужно другое пространство имен для моих контроллеров API: Смешать веб-api-контроллеры и контроллеры сайтов

4b9b3361

Ответ 1

Все, что требуется для классов контроллера, находится в другом пространстве имен, и все хорошо.

Использование областей MVC также будет работать (как указано в комментарии gordonml), но это эффективно помещает контроллеры в разные пространства имен, поэтому это более формальный способ достижения того же результата.

Ответ 2

Вы можете взглянуть на следующий пост в блоге, который иллюстрирует, как контроллер Api мог также использовать представления Razor. В основном он использует RazorEngine, чтобы проанализировать конец представления Razor.

Ответ 3

Для тех, кто ищет пошаговые инструкции о том, как это сделать в проекте WebApi:

  • Создайте две папки/пространства имен, а именно: ControllersApi и ControllersWeb
  • Щелкните правой кнопкой мыши на ControllersWeb и выберите Add -> Controller и выберите MVC 5 Controller - Empty. Это добавит все другие зависимости, если у вас их нет в проекте WebApi.
  • Теперь ваш RouteConfig зарегистрирует те классы, которые наследуются от базового класса Controller. Вероятно, вам нужно будет добавить ссылку на контроллер по умолчанию, отредактировав значения по умолчанию: defaults: new { action = "Index", controller = "Home", id = UrlParameter.Optional }

Чтобы он, теперь вы можете запускать сайт и использовать как API, так и Web-контроллеры.