ASP.NET MVC 4 Aplicación que llama a Remote WebAPI

He creado un par de aplicaciones ASP.NET MVC en el pasado, pero nunca he usado WebAPI antes. Me pregunto cómo podría crear una aplicación simple MVC 4 que haga cosas simples de CRUD a través de WebAPI en lugar de hacerlo a través de un controlador MVC normal. El truco es que la WebAPI debería ser una solución separada (y, de hecho, podría estar en un servidor / dominio diferente).

¿Cómo puedo hacer eso? ¿Qué me estoy perdiendo? ¿Es solo cuestión de configurar rutas para apuntar al servidor de WebAPI? Todos los ejemplos que he encontrado que muestran cómo consumir WebAPI utilizando una aplicación MVC parecen suponer que WebAPI está “integrado” en la aplicación MVC, o al menos está en el mismo servidor.

Ah, y para aclarar, no estoy hablando de llamadas a Ajax usando jQuery … Quiero decir que el controlador de la aplicación MVC debería usar la WebAPI para obtener / poner datos.

Debe usar HttpClient nuevo para consumir sus API de HTTP. Además, puedo recomendarle que haga sus llamadas completamente asíncronas. Como las acciones del controlador ASP.NET MVC son compatibles con el modelo de Progtwigción asincrónica basada en tareas, es bastante potente y fácil.

Aquí hay un ejemplo demasiado simplificado. El siguiente código es la clase auxiliar para una solicitud de muestra:

public class CarRESTService { readonly string uri = "http://localhost:2236/api/cars"; public async Task> GetCarsAsync() { using (HttpClient httpClient = new HttpClient()) { return JsonConvert.DeserializeObject>( await httpClient.GetStringAsync(uri) ); } } } 

Entonces, puedo consumir eso a través de mi controlador MVC de forma asíncrona, como a continuación:

 public class HomeController : Controller { private CarRESTService service = new CarRESTService(); public async Task Index() { return View("index", await service.GetCarsAsync() ); } } 

Puede echar un vistazo a la publicación siguiente para ver los efectos de las operaciones de E / S asíncronas con ASP.NET MVC:

Mi asunción a la progtwigción asincrónica basada en tareas en C # 5.0 y aplicaciones web ASP.NET MVC

Gracias a todos por las respuestas. @tugberk me llevó por el camino correcto, creo. Esto funcionó para mí …

Para mi ayudante de CarsRESTService:

 public class CarsRESTService { readonly string baseUri = "http://localhost:9661/api/cars/"; public List GetCars() { string uri = baseUri; using (HttpClient httpClient = new HttpClient()) { Task response = httpClient.GetStringAsync(uri); return JsonConvert.DeserializeObjectAsync>(response.Result).Result; } } public Car GetCarById(int id) { string uri = baseUri + id; using (HttpClient httpClient = new HttpClient()) { Task response = httpClient.GetStringAsync(uri); return JsonConvert.DeserializeObjectAsync(response.Result).Result; } } } 

Y luego para CarsController.cs:

 public class CarsController : Controller { private CarsRESTService carsService = new CarsRESTService(); // // GET: /Cars/ public ActionResult Index() { return View(carsService.GetCars()); } // // GET: /Cars/Details/5 public ActionResult Details(int id = 0) { Car car = carsService.GetCarById(id); if (car == null) { return HttpNotFound(); } return View(car); } } 

Puede usar WCF para consumir el servicio. Al igual que:

 [ServiceContract] public interface IDogService { [OperationContract] [WebGet(UriTemplate = "/api/dog")] IEnumerable List(); } public class DogServiceClient : ClientBase, IDogService { public DogServiceClient(string endpointConfigurationName) : base(endpointConfigurationName) { } public IEnumerable List() { return Channel.List(); } } 

Y luego puedes consumirlo en tu controlador:

 public class HomeController : Controller { public HomeController() { } public ActionResult List() { var service = new DogServiceClient("YourEndpoint"); var dogs = service.List(); return View(dogs); } } 

Y en su web.config coloca la configuración para su punto final:

             

http://restsharp.org/ es la respuesta a tus preguntas. Actualmente lo estoy usando en una aplicación que tiene una estructura similar.

Pero, en términos más generales, el uso de WebAPI solo consiste en publicar y solicitar datos sobre cómo procesarlo. Incluso puede usar WebRequest y JavascriptSerializer estándar.

Aclamaciones.

En este caso, puede usar HttpClient para consumir Web API desde su controlador.