Estoy construyendo una aplicación ASP.NET MVC que es pesada para el script del cliente, usará JSON y jQuery para manipular el DOM.
Mi entendimiento es tanto Controlador Web API y el controlador MVC pueden volver JSON.
Dado mi escenario, ¿debo usar un controlador de API web o un controlador MVC ?
json
asp.net-mvc
asp.net-web-api
Nil Pun
fuente
fuente
Respuestas:
Los controladores de API web se pueden crear y alojar en cualquier aplicación ASP.NET, no solo en aplicaciones MVC. Por lo tanto, una razón obvia para crear una API web es si no tiene un front-end MVC (por ejemplo, servicios web RESTful clásicos alojados por su empresa / organización).
Los Controladores MVC generalmente se basan en el Marco MVC, si observa las plantillas predeterminadas y la mayoría del trabajo realizado por la comunidad y sus pares, notará que casi todos los Controladores MVC se implementan teniendo en cuenta la Vista.
Personalmente, uso MVC Controllers cuando tengo la intención de responder con una Vista (), y usaré una API web para cualquier cosa que no dependa de una vista en particular.
Existen advertencias, por supuesto, pero en general, si no requiere el comportamiento de enlace de modelo de MVC, su servicio está centrado en los datos y las operaciones están centradas en los datos (por ejemplo, operaciones CRUD), entonces es probable que desee un controlador de API web 'en lugar de un' Controlador de vista de modelo '. Por el contrario, si sus operaciones están centradas en la vista (por ejemplo, entregar una página de administración de usuario al usuario), o si necesita el enlace de modelo de MVC para generar 'parciales ajax' (muy poco probable), entonces querrá un controlador MVC.
Personalmente, uso controladores de API web para manejar clientes RESTful basados en JSON, uso controladores MVC para manejar el enrutamiento básico del navegador y la entrega del SPA.
fuente
WebAPI es para hacer una API. Si desea que alguien pueda consumir su API en XML, JSON, etc., puede hacer una API web.
En su caso, solo necesita hablar con el cliente en JSON.
A pesar de que su sitio web se basa principalmente en la secuencia de comandos del cliente, todavía estaría usando ASP.NET MVC Controller, ¿verdad? Y dado que es posible que ya haya dividido lógicamente sus controladores en función de las entidades, entonces tiene sentido agregar esos métodos de publicación json en lugar de crear otra clase específicamente para la API web.
Entonces, para su situación particular (si lo entiendo correctamente), me quedaría con los Controladores.
fuente
La respuesta se reduce a la separación de preocupaciones, fijar la creación de servicios y confiar en la convención en lugar de la configuración.
La responsabilidad principal de los controladores es trabajar como coordinador entre la vista y su modelo, pero la principal responsabilidad de la API es trabajar en los datos. En el caso de las convenciones de API, es muy fácil realizar operaciones CRUD. A continuación se muestra la asignación entre la operación CRUD y las acciones HTTP
Por lo tanto, con las API no tiene que crear acciones separadas y atribuirlas con acciones HTTP.
fuente
La única preocupación que tengo con ApiController es que se basa en el sitio y no en el área. Un sitio solo puede tener una subcarpeta de un controlador para que pueda nombrar sus métodos de controlador. Es posible que desee duplicar el nombre del controlador en diferentes áreas:
domain.com/api/area1/controller1/
domain.com/api/area2/controller1/
Recuerdo que hay algunas configuraciones de código personalizadas para poder hacer esto, pero no funciona de manera predeterminada.
fuente
Estoy de acuerdo con la respuesta de Shaun Wilson (respuesta principal), pero no estoy seguro de por qué, ya que estoy un poco confundido y todavía trato de entender con la siguiente premonición (probablemente incorrecta):
Verá, simplemente no sé cómo soy incorrecto aquí y estoy confundido porque la última línea de la respuesta de Shaun dice "Yo uso controladores MVC para manejar el enrutamiento básico del navegador y la entrega del SPA". - tal vez no sé completamente qué es un cliente tranquilo cuando supuse que podría ser un método JavaScript que recibe una respuesta en forma JSON. Esta es la publicación más cercana en Stackoverflow que se relacionó de forma remota como una respuesta a mi pregunta, así que estoy respondiendo esta publicación en lugar de posiblemente duplicar las preguntas.
fuente
En este escenario, recomendaría WebApi, ya que es perfecto para transferir datos como este basados en solicitudes de Javascript. Por lo general, desarrollaré mis controladores WebApi para que devuelvan un objeto compatible con JSON que luego pueda analizar fácilmente mi Javascript.
El único momento real en el que desearía utilizar una acción en un controlador MVC para este tipo de cosas sería si quisiera generar algo de HTML y reemplazar segmentos de su página con llamadas de Javascript.
Por ejemplo:
Tiene un selector de fecha de la interfaz de usuario de JQuery que, al seleccionarlo, genera una lista de botones de opción que representan eventos en el día elegido.
En este escenario, podría usar WebApi para devolver algunos JSON y luego generar el HTML necesario usando Javascript, pero generalmente es una mala práctica crear mucho HTML usando Javascript. Sería mucho mejor hacer que C # construya el HTML y luego lo devuelva a través de una vista parcial, ya que de esta manera es menos probable que encuentre errores con el análisis de Javascript. Sin mencionar que hace que el HTML sea mucho más fácil de escribir.
fuente