HI WELCOME TO KANSIRIS

ASP.NEt MVC using Web API to return a Razor view

Leave a Comment
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.