He estado jugando con ASP.NET MVC 4 beta y ahora veo dos tipos de controladores: ApiController
y Controller
.
Estoy un poco confundido sobre qué situaciones puedo elegir un controlador en particular.
Por ejemplo: si quiero devolver una vista, entonces tengo que usar ApiController
o el ordinarioController
? Soy consciente de que la API web de WCF ahora está integrada con MVC.
Como ahora podemos usar ambos controladores, ¿alguien puede señalar qué situaciones elegir para el controlador correspondiente?
ApiController
y,Controller
por lo tanto, si está utilizando el .NET más nuevo, ya no tendrá que preocuparse por ApiController: docs.microsoft.com/en-us/aspnet/core/tutorials/first-web- apiRespuestas:
Utilice el controlador para representar sus vistas normales. La acción ApiController solo devuelve datos que se serializan y se envían al cliente.
aqui esta el link
Citar:
Los ApiControllers están especializados en devolver datos. Por ejemplo, se encargan de serializar los datos de forma transparente en el formato solicitado por el cliente. Además, siguen un esquema de enrutamiento diferente de forma predeterminada (como en: asignación de URL a acciones), proporcionando una API REST-ful por convención.
Probablemente podría hacer cualquier cosa usando un Controlador en lugar de un ApiController con alguna codificación manual (?). Al final, ambos controladores se basan en la base ASP.NET. Pero tener una API REST-ful es un requisito tan común hoy en día que WebAPI se creó para simplificar la implementación de dicha API.
Es bastante simple decidir entre los dos: si está escribiendo una aplicación web / internet / intranet basada en HTML, tal vez con la llamada ocasional de AJAX que devuelve json aquí y allá, quédese con MVC / Controller. Si desea proporcionar una interfaz basada en datos / REST-ful a un sistema, vaya con WebAPI. Puede combinar ambos, por supuesto, tener un ApiController para atender las llamadas AJAX desde una página MVC.
Para dar un ejemplo del mundo real: actualmente estoy trabajando con un sistema ERP que proporciona una API REST-ful a sus entidades. Para esta API, WebAPI sería un buen candidato. Al mismo tiempo, el sistema ERP proporciona una aplicación web altamente AJAX que puede usar para crear consultas para la API REST-ful. La aplicación web en sí podría implementarse como una aplicación MVC, haciendo uso de WebAPI para obtener metadatos, etc.
fuente
¿Cuál preferirías escribir y mantener?
ASP.NET MVC
API web ASP.NET
fuente
Controller
clase.ApiController
sólo: Controller
obras, se puede añadir nuevos puntos ejemplo del controlador de red de núcleo tambiénJson()
versión. Es más claro y más explícito. No me gusta un montón de magia negra al tratar de averiguar cómo responderá mi código a una solicitud.Me encanta el hecho de que MVC6 de ASP.NET Core fusionó los dos patrones en uno solo porque a menudo necesito admitir ambos mundos. Si bien es cierto que puede ajustar cualquier MVC estándar
Controller
(y / o desarrollar sus propiasActionResult
clases) para actuar y comportarse de la misma maneraApiController
, puede ser muy difícil de mantener y probar: además de eso, hacer que los métodos de los Controladores regresenActionResult
mezclados con otros volviendo crudo / serializado /IHttpActionResult
puede ser muy confuso desde la perspectiva del desarrollador, especialmente si no está trabajando solo y necesita que otros desarrolladores aceleren con ese enfoque híbrido.La mejor técnica que he llegado hasta ahora para minimizar ese problema en las aplicaciones web no principales de ASP.NET es importar (y configurar correctamente) el paquete de API web en la aplicación web basada en MVC, para que pueda tener lo mejor de ambos mundos:
Controllers
para Vistas,ApiControllers
para datos.Para hacer eso, debe hacer lo siguiente:
Microsoft.AspNet.WebApi.Core
yMicrosoft.AspNet.WebApi.WebHost
./Controllers/
carpeta./App_Config/
carpeta:Finalmente, deberá registrar la clase anterior en su clase de inicio (ya sea
Startup.cs
oGlobal.asax.cs
, dependiendo de si está utilizando la plantilla de inicio de OWIN o no).Startup.cs
Global.asax.cs
Este enfoque, junto con sus ventajas y desventajas, se explica con más detalle en esta publicación que escribí en mi blog.
fuente
Controller
devolver una cadena serializada con Json envuelta dentro de unaActionResult
es definitivamente más difícil de probar y mantener que unaApiController
que se puede configurar para devolver directamente una lista de[Serializable]
elementos. Cualquier método de prueba sería mucho más fácil de escribir, ya que no tendrá que deserializar manualmente cada vez: se puede decir lo mismo para casi cualquier tarea de integración del sistema con ASP.NET u otros marcos.Controllers
son geniales, peroApiControllers
son más adecuados para tareas RESTful, al menos en .NET Framework 4.xTodos los métodos en la API web devolverán datos (JSON) sin serialización.
Sin embargo, para devolver datos JSON en controladores MVC, estableceremos el tipo de resultado de acción devuelto en JsonResult y llamaremos al método Json en nuestro objeto para asegurarnos de que esté empaquetado en JSON.
fuente
La principal diferencia es: Web API es un servicio para cualquier cliente, cualquier dispositivo, y MVC Controller solo sirve a su cliente. Lo mismo porque es la plataforma MVC.
fuente
Es bastante simple decidir entre los dos: si está escribiendo una aplicación web / internet / intranet basada en HTML, tal vez con la llamada ocasional de AJAX que devuelve json aquí y allá, quédese con MVC / Controller. Si desea proporcionar una interfaz basada en datos / REST-ful a un sistema, vaya con WebAPI. Puede combinar ambos, por supuesto, tener un ApiController para atender las llamadas AJAX desde una página MVC. Básicamente, el controlador se usa para mvc y el controlador api se usa para Rest-API, puede usar ambos en el mismo programa que necesite
fuente