Я играл с ASP.NET MVC 4 beta и теперь вижу два типа контроллеров: ApiController
и Controller
.
Меня немного смущает, в каких ситуациях я могу выбрать тот или иной контроллер.
Например: если я хочу вернуть представление, то я должен использовать ApiController
или обычный Controller
? Я знаю, что веб-API WCF теперь интегрирован с MVC.
Поскольку теперь мы можем использовать оба контроллера, может кто-нибудь указать, в каких ситуациях использовать соответствующий контроллер.
ApiController
иController
поэтому , если вы используете более новый .NET вам не нужно беспокоиться о ApiController больше - docs.microsoft.com/en-us/aspnet/core/tutorials/first-web- APIОтветы:
Используйте контроллер для рендеринга ваших обычных представлений. Действие ApiController возвращает только те данные, которые сериализованы и отправлены клиенту.
вот ссылка
Quote:
ApiControllers специализируются на возврате данных. Например, они заботятся о прозрачной сериализации данных в формат, запрошенный клиентом. Кроме того, они следуют другой схеме маршрутизации по умолчанию (как в: сопоставление URL-адресов с действиями), предоставляя API REST-ful по соглашению.
Вы могли бы сделать что-нибудь, используя Controller вместо ApiController с некоторым (?) Ручным кодированием. В конце оба контроллера основываются на фундаменте ASP.NET. Но наличие REST-ful API является настолько распространенным требованием сегодня, что WebAPI был создан для упрощения реализации такого API.
Выбор между ними довольно прост: если вы пишете приложение на основе HTML для веб / интернета / интранета - возможно, из-за случайного вызова AJAX, возвращающего json тут и там - придерживайтесь MVC / Controller. Если вы хотите предоставить управляемый данными / REST-ful интерфейс для системы, используйте WebAPI. Конечно, вы можете комбинировать и то, и другое, имея вызовы AJAX от ApiController со страницы MVC.
Чтобы привести пример из реальной жизни: в настоящее время я работаю с системой ERP, которая предоставляет API-интерфейс REST своим организациям. Для этого API WebAPI был бы хорошим кандидатом. В то же время система ERP предоставляет веб-приложение с высокой степенью AJAX, которое можно использовать для создания запросов к API REST-ful. Само веб-приложение может быть реализовано как приложение MVC, использующее WebAPI для извлечения метаданных и т. Д.
источник
Что бы вы предпочли написать и поддерживать?
ASP.NET MVC
ASP.NET Web API
источник
Controller
класса.ApiController
только: Controller
работе, вы можете добавить новый точечный чистый базовый пример контроллера тожеJson()
версию. Это понятнее и понятнее. Я не люблю кучу черной магии, пытаясь выяснить, как мой код будет отвечать на запрос.Мне нравится тот факт, что ASP.NET Core MVC6 объединил два шаблона в один, потому что мне часто нужно поддерживать оба мира. Хотя это правда, что вы можете настроить любой стандартный MVC
Controller
(и / или разработать свои собственныеActionResult
классы) так, чтобы он действовал и вел себя так же, как и егоApiController
, его очень сложно поддерживать и тестировать: кроме того, методы Controllers возвращаютActionResult
смешанные с другими Возвращение необработанных / сериализованных /IHttpActionResult
данных может быть очень запутанным с точки зрения разработчика, особенно если вы работаете не в одиночку и вам необходимо ускорить работу других разработчиков с помощью этого гибридного подхода.Лучший способ, который я до сих пор использовал, чтобы минимизировать эту проблему в неосновных веб-приложениях ASP.NET, - это импортировать (и правильно настроить) пакет веб-API в веб-приложение на основе MVC, чтобы я мог использовать оба миры:
Controllers
для представлений,ApiControllers
для данных.Для этого вам необходимо сделать следующее:
Microsoft.AspNet.WebApi.Core
иMicrosoft.AspNet.WebApi.WebHost
./Controllers/
папку./App_Config/
папку:Наконец, вам нужно зарегистрировать вышеуказанный класс в своем классе запуска (либо,
Startup.cs
либоGlobal.asax.cs
, в зависимости от того, используете ли вы шаблон запуска OWIN или нет).Startup.cs
Global.asax.cs
Этот подход - вместе с его плюсами и минусами - более подробно объясняется в этом посте, который я написал в своем блоге.
источник
Controller
Короче говоря, вернуть сериализованную Json-строку, заключенную в,ActionResult
определенно сложнее для тестирования и поддержки, чем для установки,ApiController
которая может напрямую возвращать список[Serializable]
элементов. Любой метод тестирования будет гораздо проще написать, потому что вам не придется каждый раз десериализовать вручную: то же самое можно сказать почти о любой задаче системной интеграции с ASP.NET или другими платформами.Controllers
отлично, ноApiControllers
лучше подходят для задач RESTful, по крайней мере, в .NET Framework 4.xКаждый метод в Web API будет возвращать данные (JSON) без сериализации.
Однако для возврата данных JSON в контроллеры MVC мы установим возвращаемый тип результата действия в JsonResult и вызовем метод Json для нашего объекта, чтобы убедиться, что он упакован в JSON.
источник
Основное отличие заключается в следующем: Web API - это сервис для любого клиента, любых устройств, а MVC Controller обслуживает только своего клиента. То же самое, потому что это платформа MVC.
источник
Выбор между ними довольно прост: если вы пишете приложение на основе HTML для веб / интернета / интранета - возможно, из-за случайного вызова AJAX, возвращающего json тут и там - придерживайтесь MVC / Controller. Если вы хотите предоставить управляемый данными / REST-ful интерфейс для системы, используйте WebAPI. Конечно, вы можете комбинировать и то, и другое, имея вызовы AJAX от ApiController со страницы MVC. В основном, контроллер используется для mvc, а api-контроллер - для Rest-API, вы можете использовать оба в одной программе, как вам нужно
источник