Использование WebAPI или MVC для возврата JSON в ASP.NET

Я создаю приложение ASP.NET MVC, которое является клиентским script тяжелым, оно будет использовать JSON и jQuery для управления DOM.

Мое понимание - это Контроллер веб-API и Контроллер MVC может возвращать JSON.

Учитывая мой сценарий, следует ли использовать Контроллер веб-API или MVC Controller?

Ответ 1

Контроллеры веб-API могут быть созданы и размещены в любом приложении ASP.NET, а не только в приложениях MVC. Таким образом, очевидная причина для создания веб-API заключается в том, что у вас нет внешнего интерфейса MVC (например, классических веб-сервисов RESTful, размещенных вашей компанией/организацией.)

Контроллеры MVC обычно полагаются на MVC Framework, если вы посмотрите на шаблоны по умолчанию и большую часть работы, выполненной сообществом и вашими коллегами, вы заметите, что почти все MVC-контроллеры реализованы с учетом представления.

Лично я использую MVC-контроллеры, когда я намереваюсь отвечать с помощью View(), и я буду использовать веб-API для чего-либо, что не зависит от определенного вида.

Конечно, есть оговорки, но, вообще говоря, если вы не требуете поведения привязки модели MVC, ваша служба ориентирована на данные, а операции ориентированы на данные (например, операции CRUD), тогда вы, вероятно, Web API Controller 'вместо "Model-View Controller". И наоборот, если ваши операции ориентированы на View-centric (например, доставляют пользователю пользовательскую страницу пользователю), или вам требуется MVC Model Binding для генерации "ajax partials" (очень маловероятно), тогда вам понадобится MVC-контроллер.

Лично я использую контроллеры Web API для управления клиентами RESTful на основе JSON, я использую контроллеры MVC для обработки базовой маршрутизации браузера и доставки SPA.

Ответ 2

WebAPI предназначен для создания API. Если вы хотите, чтобы кто-то мог использовать ваш API в XML, JSON и т.д. Вы можете сделать веб-api.

В вашем случае вам нужно только поговорить с клиентом в JSON.

Несмотря на то, что ваш сайт в основном клиентский script управляется, вы все равно будете использовать ASP.NET MVC Controller правильно? И поскольку вы, возможно, уже логически разделили свои контроллеры на основе сущностей, тогда имеет смысл добавить эти json-сервисные методы в него, а не создавать другой класс специально для веб-api.

Итак, для вашей конкретной ситуации (если я правильно понимаю), я бы придерживался контроллеров.

Ответ 3

Ответ сводится к разделению проблем, закреплению создания сервисов и полагаться на соглашение, а не на конфигурацию.

Основная ответственность диспетчеров заключается в том, чтобы работать координатором между представлением и вашей моделью, но где, поскольку основной задачей API является работа над данными. В случае API-соглашений очень легко выполнять операции CRUD. Ниже приведено сопоставление между операцией CRUD и действиями HTTP.

  • GET: Прочитайте
  • POST: Создать
  • PUT: Обновить
  • УДАЛИТЬ: Удалить

Таким образом, с API вам не нужно создавать отдельные действия и связывать их с действиями HTTP.

Ответ 4

Единственное беспокойство, которое я испытываю с ApiController, заключается в том, что он основан не на базе сайта, а на основе сайта. На одном сайте может быть только одна подкаталог apicontroller, чтобы вы могли назвать свои методы контроллера. Возможны ситуации, когда вы захотите дублировать имя контроллера в разных областях:

domain.com/api/area1/controller1/

domain.com/api/area2/controller1/

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

Ответ 5

Я согласен с ответом Shaun Wilson (верхний ответ), но не уверен, почему, поскольку я просто немного смущен и все еще пытаюсь понять следующее (возможно неправильное) предчувствие -

  • Используйте WebAPI Controller для доставки данных JSON клиенту, чтобы клиент мог обрабатывать манипуляции с представлениями. Для этого процесса НЕ требуется представление, а скорее ответ на все, что называется методом (т.е. Запрос javascript), так что клиент может обрабатывать любые манипуляции на стороне клиента.
  • Используйте MVC-контроллер, когда вам нужно использовать данные для управления просмотром во время или сразу после page_load (т.е. не для SPA-приложений).

Видите ли, я просто не знаю, как я здесь ошибаюсь, и смущен, потому что последняя строка ответа Shaun гласит: "Я использую контроллеры MVC для обработки базовой маршрутизации браузера и доставки SPA".   - возможно, я не совсем знаю, что такое спокойный клиент, когда я предположил, что это может быть метод JavaScript, который получает ответ в форме JSON. это ближайший пост в Stackoverflow, который был удаленно связан как ответ на мой вопрос, поэтому я отвечаю на этот пост, а не на вопрос о дублировании.

Ответ 6

В этом случае я бы рекомендовал WebApi, поскольку он идеально подходит для передачи данных, таких как на основе запросов Javascript. Обычно я разрабатываю свои контроллеры WebApi, чтобы они возвращали JSON-дружественный объект, который затем легко анализируется с помощью моего Javascript.

Единственное реальное время, когда вы хотели бы использовать действие на контроллере MVC для такого рода вещей, было бы, если бы вы хотели сгенерировать HTML-код и заменить сегменты своей страницы на вызовы Javascript.

Например:

У вас есть JQuery UI Datepicker, который после выбора генерирует список переключателей, которые представляют события в выбранный день.

В этом случае вы можете использовать WebApi для возврата некоторого JSON, а затем сгенерировать необходимый HTML с помощью Javascript, но обычно это плохая практика для создания большого количества HTML с использованием Javascript. Было бы намного лучше, если бы С# создал HTML-код, а затем вернул его с частичным представлением, так как вы вряд ли столкнетесь с ошибками при анализе Javascript. Не говоря уже о том, что HTML намного проще писать.