How to make the View returned by the controller and generated by Razor get the data from the api i want to keep the razor engine view and use the api the original mvc controller returns the view with the data as parameter now i want the data from the api
MVC controller
public class ProductController : Controller
{
public ActionResult Index()
{
return View();
}
Api Controller
public class ProductsController : ApiController
{
private ApplicationDbContext db = new ApplicationDbContext();
// GET api/Products
public IEnumerable<Product> GetProducts()
{
return db.Products;
}
}
Model:
@model IEnumerable<WebApplication2.Models.Product>@{ViewBag.Title = "Index";}<h2>Index</h2><p>@Html.ActionLink("Create New", "Create")</p><table class="table"><tr><th>@Html.DisplayNameFor(model => model.Name)</th><th>@Html.DisplayNameFor(model => model.Category)</th><th>@Html.DisplayNameFor(model => model.Price)</th><th></th></tr>@foreach (var item in Model) {<tr><td>@Html.DisplayFor(modelItem => item.Name)</td><td>@Html.DisplayFor(modelItem => item.Category)</td><td>@Html.DisplayFor(modelItem => item.Price)</td><td>@Html.ActionLink("Edit", "Edit", new { id=item.Id }) |@Html.ActionLink("Details", "Details", new { id=item.Id }) |@Html.ActionLink("Delete", "Delete", new { id=item.Id })</td></tr>}</table>
You could send an HTTP request to your Web API controller from within the ASP.NET MVC controller:
public class ProductController : Controller
{
public ActionResult Index()
{
var client = new HttpClient();
var response = client.GetAsync("http://yourapi.com/api/products").Result;
var products = response.Content.ReadAsAsync<IEnumerable<Product>>().Result;
return View(products);
}
}
Also if you can take advantage of the .NET 4.5 async/await it is strongly recommended to do so to avoid blocking calls:
public class ProductController : Controller
{
public async Task<ActionResult> Index()
{
var client = new HttpClient();
var response = await client.GetAsync("http://yourapi.com/api/products");
var products = await response.Content.ReadAsAsync<IEnumerable<Product>>();
return View(products);
}
}


0 comments:
Post a Comment
Note: only a member of this blog may post a comment.