Разница между проектом MVC 5 и проектом Web Api

135

Я новичок в ASP.NET MVC и веб-API и пытаюсь получить основы. AFAIK, у нас есть шаблоны проектов в VS 2013, названные как MVC, Web APIи Both of them together.

Я прошел учебники и узнал, что мы можем создать API, используя как MVC, так и шаблон Web API.

Итак, каковы различия между ними, основанные на архитектуре и использовании ?

петля
источник

Ответы:

182

По сути, Web APIконтроллер - это MVCконтроллер, который использует HttpMessageResponseв качестве базового типа своего ответа вместо ActionResponse. Они одинаковы во многих других отношениях. Основное различие между типами проектов заключается в том, что к MVC Applicationтипу проекта добавляются специфические для веб-сайта вещи, такие как default CSS, JavaScriptфайлы и другие ресурсы, необходимые для веб-сайта, которые не нужны для API.

MVC используется для создания веб-сайтов. В этом случае Controllersобычно возвращают View(т.е. ответ HTML) на запросы браузера. С другой стороны, веб-API обычно предназначены для использования другими приложениями. Если вы хотите разрешить другим приложениям получать доступ к вашим данным / функциям, вы можете создать веб-API для облегчения этого доступа. Например, Facebook имеет API для того, чтобы позволить разработчикам приложений получать доступ к информации о пользователях, использующих приложение. Веб-API не должны быть для общего пользования. Вы также можете создать API для поддержки ваших собственных приложений. Например, мы создали веб-API для поддержки функциональности AJAX нашего веб-сайта MVC.

Microsoft изменила способ представления разных шаблонов. Теперь вместо использования разных шаблонов для разных типов проектов они рекомендуют разработчикам смешивать технологии ASP.NET внутри одного проекта по мере необходимости. Microsoft называет это vNext.

ОБНОВЛЕНИЕ: Для ASP.NET Core, веб-API был интегрирован в тип проекта MVC 6, и ApiControllerкласс объединен в Controllerкласс. Более подробная информация по адресу: https://wildermuth.com/2016/05/10/Writing-API-Controllers-in-ASP-NET-MVC-6

Элад Лачми
источник
1
Спасибо, Elad, я получил его. Можете ли вы сделать en edit в свой ответ и добавить кое-что о Asp.net Identity и Web Api 2 Просто некоторые из них, как они будут использоваться и извлечь выгоду. Просто несколько слов.
цикл
Таким образом, я не могу получить доступ к действию контроллера из приложения dektop. даже если я использую правильный синтаксис GET для вызова URL?
Небьющийся
70

Мои два цента...

  1. В ASP.Net MVC - MVC Controllerрешает, что должно быть View- т.е. контроллер решает, что пользователь должен «видеть» (основываясь на текущем сценарии или контексте), когда он делает запрос.
  2. В ASP.Net Web Forms , то ASPXстраница решает , что пользователь должен «видеть» , когда они делают запрос.
  3. Но в Web API нет управления / возможности для каких-либо функций Web API, чтобы решить, что пользователь должен «видеть», когда он делает запрос.

Web API - это НЕ технология, связанная только с веб-сайтами. Он может быть использован для нескольких целей - не только веб-сайтов. Так что он не знает смыслаrendering

Дальнейшее чтение

  1. Планирование веб-решений сегодня: веб-формы, ASP.NET MVC, веб-API и OWIN.
  2. WCF или ASP.NET веб-API? Мои два цента на эту тему
  3. Следующее поколение .NET - ASP.NET vNext
  4. Начало работы с ASP.NET MVC 6
LCJ
источник
Я не могу сказать из сравниваемых кодов, почему WebAPI является более читабельным. Кроме того, похоже, что там что-то перевернуто, поскольку именно веб-API должен иметь атрибут метода HTTP, например [HttpGet]. Проверьте некоторые WebAPI код (и WebAPI 2) здесь
Gobe
2
Принятый ответ гласит: «По сути, контроллер Web API является контроллером MVC». Это просто неправильно. Ваш ответ указует, что вся POINT из WebAPI является то , что это НЕ MVC, это НЕ иметь дело со всем багажом и накладными расходами для работы с «Views» и «оказанием». ... и контроллеры WebApi даже не нужно связывать только с веб-сайтами. Очень хороший ответ - спасибо!
FoggyDay
0

Контроллер MVC, производный от класса контроллера. В Mvc вы можете вернуть просмотры. Mvc архитектуру использует для создания приложения. Однако веб-API используются для предоставления данных различным приложениям.

Web Api работает от контроллера Api и не возвращает вид.

Примечание. Вы также можете создать Web Api из контроллера MVC, но вам нужно возвращать результат в виде JsonResult или других поддерживаемых типов возврата API.

Акшай Капур
источник
0

В дополнение к ответам, уже предоставленным здесь, стоит отметить, что любой контроллер, унаследованный от ApiController и имеющий действие с глаголом HOSTP POST, может иметь только один входной параметр [FromBody]. При использовании контроллера MVC (производного от «Controller») у вас может быть много пост-входных параметров.

barrypicker
источник