Venho brincando com o ASP.NET MVC 4 beta e agora vejo dois tipos de controladores: ApiController
e Controller
.
Estou um pouco confuso em que situações posso escolher um controlador em particular.
Por exemplo: se eu quiser retornar uma visualização, devo usar ApiController
ou o comum Controller
? Estou ciente de que a API da Web do WCF agora está integrada ao MVC.
Como agora podemos usar os dois controladores, alguém pode apontar em quais situações o controlador correspondente será direcionado.
ApiController
e,Controller
portanto, se você estiver usando o .NET mais recente, não precisará mais se preocupar com o ApiController - docs.microsoft.com/en-us/aspnet/core/tutorials/first-web- apiRespostas:
Use o Controller para renderizar suas visualizações normais. A ação ApiController retorna apenas dados serializados e enviados ao cliente.
aqui está o link
Citar:
Os ApiControllers são especializados em retornar dados. Por exemplo, eles cuidam da serialização transparente dos dados no formato solicitado pelo cliente. Além disso, eles seguem um esquema de roteamento diferente por padrão (como em: mapear URLs para ações), fornecendo uma API REST-ful por convenção.
Você provavelmente poderia fazer qualquer coisa usando um Controller em vez de um ApiController com a codificação manual (?). No final, os dois controladores se baseiam na base do ASP.NET. Mas ter uma API REST-ful é um requisito tão comum hoje em dia que a WebAPI foi criada para simplificar a implementação de uma API desse tipo.
É bastante simples decidir entre os dois: se você estiver escrevendo um aplicativo Web / Internet / Intranet baseado em HTML - talvez com uma chamada AJAX ocasional retornando json aqui e ali - fique com o MVC / Controller. Se você deseja fornecer uma interface orientada a dados / REST-ful a um sistema, acesse WebAPI. É possível combinar ambos, é claro, ter um ApiController para atender chamadas AJAX a partir de uma página do MVC.
Para dar um exemplo do mundo real: atualmente, estou trabalhando com um sistema ERP que fornece uma API REST-cheia para suas entidades. Para essa API, o WebAPI seria um bom candidato. Ao mesmo tempo, o sistema ERP fornece um aplicativo Web altamente AJAX-ified que você pode usar para criar consultas para a API REST-ful. O aplicativo da Web em si pode ser implementado como um aplicativo MVC, fazendo uso da WebAPI para buscar metadados, etc.
fonte
Qual você prefere escrever e manter?
ASP.NET MVC
API da Web do ASP.NET
fonte
Controller
classe.ApiController
apenas com: Controller
trabalhos, você pode adicionar um novo exemplo de controlador de ponto líquido para o núcleo tambémJson()
versão. É mais claro e mais explícito. Não gosto de muita magia negra na tentativa de descobrir como meu código responderá a uma solicitação.Adoro o fato de o MVC6 do ASP.NET Core mesclar os dois padrões em um, porque muitas vezes preciso oferecer suporte aos dois mundos. Embora seja verdade que você pode ajustar qualquer MVC padrão
Controller
(e / ou desenvolver suas própriasActionResult
classes) para agir e se comportar como umApiController
, pode ser muito difícil de manter e testar: além disso, ter métodos de Controladores retornandoActionResult
misturados com outros retornar dados brutos / serializados /IHttpActionResult
pode ser muito confuso do ponto de vista do desenvolvedor, principalmente se você não estiver trabalhando sozinho e precisar levar outros desenvolvedores a acelerar essa abordagem híbrida.A melhor técnica que eu vim até agora para minimizar esse problema em aplicativos da Web não-essenciais do ASP.NET é importar (e configurar corretamente) o pacote da API da Web no aplicativo da Web baseado em MVC, para que eu possa ter o melhor de ambos mundos:
Controllers
para Views,ApiControllers
para dados.Para fazer isso, você precisa fazer o seguinte:
Microsoft.AspNet.WebApi.Core
eMicrosoft.AspNet.WebApi.WebHost
./Controllers/
pasta./App_Config/
pasta:Por fim, você precisará registrar a classe acima na sua Inicialização classe (
Startup.cs
ouGlobal.asax.cs
, dependendo se você estiver usando o modelo de inicialização OWIN ou não).Startup.cs
Global.asax.cs
Essa abordagem - junto com seus prós e contras - é explicada mais detalhadamente neste post que escrevi no meu blog.
fonte
Controller
retorno de uma sequência serializada Json inserida em umaActionResult
é definitivamente mais difícil de testar e manter do que umaApiController
que pode ser configurada para retornar diretamente uma lista de[Serializable]
itens. Qualquer método de teste seria muito mais fácil de escrever, porque você não precisará desserializar manualmente a cada vez: o mesmo pode ser dito para praticamente qualquer tarefa de integração de sistemas com o ASP.NET ou outras estruturas.Controllers
são grandes, masApiControllers
são mais adequados para tarefas RESTful, pelo menos em .NET Framework 4.xTodo método na API da Web retornará dados (JSON) sem serialização.
No entanto, para retornar dados JSON nos controladores MVC, definiremos o tipo de resultado da ação retornado como JsonResult e chamaremos o método Json em nosso objeto para garantir que ele seja empacotado em JSON.
fonte
A principal diferença é: Web API é um serviço para qualquer cliente, qualquer dispositivo e o MVC Controller serve apenas a seu cliente. O mesmo porque é a plataforma MVC.
fonte
É bastante simples decidir entre os dois: se você estiver escrevendo um aplicativo Web / Internet / Intranet baseado em HTML - talvez com uma chamada AJAX ocasional retornando json aqui e ali - fique com o MVC / Controller. Se você deseja fornecer uma interface orientada a dados / REST-ful a um sistema, acesse WebAPI. É possível combinar ambos, é claro, ter um ApiController para atender chamadas AJAX a partir de uma página do MVC. Basicamente, o controlador é usado para mvc e o api-controller é usado para Rest-API. Você pode usar ambos no mesmo programa que sua necessidade
fonte