Web API Example: ProductsController

Here's an example Web API controller that exposes a simple data object through Entity Framework's Code First feature. To support this example, we will need three files:

  • The modelProduct.cs (Listing 11-3)
  • The database contextDataContext.cs (Listing 11-4)
  • The Web API controllerProductsController.cs (Listing 11-5)

Listing 11.3: Product.cs

public class Product
{
    public int ID { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public int UnitsInStock { get; set; }
}

Listing 11.4: DataContext.cs

public class DataContext : DbContext
{
    public DbSet<Product> Products { get; set; }
}

Listing 11.5: ProductsController.cs

public class ProductsController : ApiController
{
    private DataContext db = new DataContext();
    // GET api/Products
    public IEnumerable<Product> GetProducts()
    {
        return db.Products;
    }
    // GET api/Products/5
    public Product GetProduct(int id)
    {
        Product product = db.Products.Find(id);
        if (product == null)
        {
            throw new HttpResponseException(
                Request.CreateResponse(
                    HttpStatusCode.NotFound));
        }
        return product;
    }
    // PUT api/Products/5
    public HttpResponseMessage PutProduct(int id, Product product)
    {
        if (ModelState.IsValid && id == product.ID)
        {
            db.Entry(product).State = EntityState.Modified;
            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                return
                    Request.CreateResponse(
                        HttpStatusCode.NotFound);
            }
            return
                Request.CreateResponse(
                    HttpStatusCode.OK, product);
        }
        else
        {
            return
                Request.CreateResponse(
                    HttpStatusCode.BadRequest);
        }
    }
    // POST api/Products
    public HttpResponseMessage PostProduct(Product product)
    {
        if (ModelState.IsValid)
        {
            db.Products.Add(product);
            db.SaveChanges();
            HttpResponseMessage response =
                Request.CreateResponse(
                    HttpStatusCode.Created, product);
            response.Headers.Location =
                new Uri(Url.Link(
                    "DefaultApi",
                    new { id = product.ID }));
            return response;
        }
        else
        {
            return
                Request.CreateResponse(
                    HttpStatusCode.BadRequest);
        }
    }
    // DELETE api/Products/5
    public HttpResponseMessage DeleteProduct(int id)
    {
        Product product = db.Products.Find(id);
        if (product == null)
        {
            return
                Request.CreateResponse(
                    HttpStatusCode.NotFound);
        }
        db.Products.Remove(product);
        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            return
                Request.CreateResponse(
                    HttpStatusCode.NotFound);
        }
        return
            Request.CreateResponse(
                HttpStatusCode.OK, product);
    }
    protected override void Dispose(bool disposing)
    {
        db.Dispose();
        base.Dispose(disposing);
    }
}
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset