namespaceHelloWebAPI.Controllers{ usingHelloWebAPI.Models; usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Net; usingSystem.Net.Http; usingSystem.Web.Http; publicclassProductsController:ApiController { Product[] products =newProduct[] { newProduct{Id=1,Name="Tomato Soup",Category="Groceries",Price=1}, newProduct{Id=2,Name="Yo-yo",Category="Toys",Price=3.75M}, newProduct{Id=3,Name="Hammer",Category="Hardware",Price=16.99M} }; publicIEnumerable<Product>GetAllProducts() { return products; } publicProductGetProductById(int id) { var product = products.FirstOrDefault((p)=> p.Id== id); if(product ==null) { thrownewHttpResponseException(HttpStatusCode.NotFound); } return product; } publicIEnumerable<Product>GetProductsByCategory(string category) { return products.Where( (p)=>string.Equals(p.Category, category, StringComparison.OrdinalIgnoreCase)); } }}
为了让例子保持简单,我们直接把产品存到控制器类里的一个固定数组里。当然,在实际的程序里需要从数据库里查询或者用其它的一些外部数据源。
控制器定义了三个方法,要么返回单个商品,要么返回一组产品:
GetAllProducts
方法返回所有的产品,返回类型为 IEnumerable<Product> 。GetProductById
方法通过ID查询某个产品。GetProductsByCategory
方法返回指定分类的所有产品。
完事儿了!web API已经能用了。每一个控制器上的方法都对应了一个URI
控制器方法 | URI |
---|---|
GetAllProducts | /api/products |
GetProductById | /api/products/id |
GetProductsByCategory | /api/products/?category=category |
客户端只要通过放松一个HTTP GET请求到URI就可以调用相应的方法。待会儿我们来看看这个映射是怎么做的。但首先我们先把它跑起来试试。
1. Web API中包含的方法
Action |
HTTP method |
Relative URI |
GetAllContact |
GET |
/api/contact |
GetContact |
GET |
/api/contact /id |
GetListBySex |
GET |
/api/contact?sex=sex |
PostContact |
POST |
/api/contact |
PutContact |
PUT |
/api/contact/id |
DeleteContact |
DELETE |
/api/contact/id |