添加CRUD的基本操作方法

  第一个:拿到所有成品音讯列表,在控制器中添加方法如下

1  public IEnumerable<Product> GetProducts()
2  {
3      return repository.GetAll();
4  }

这一个主意是以Get开首,所以经过预约映射Get请求,其它,因为不含有参数,它映射一个不分包在路子中的id字段的URI

其次个点子:通过产品编号获取一个出品信息,在控制器添加方法如下

1 public Product GetProduct(int id)
2 {
3             var item = repository.Get(id);
4             if (item == null)
5                 //未找到抛出一个404的状态码异常
6                 throw new 
7                   HttpResponseException(HttpStatusCode.NotFound);
8             return item;
9 }

以此艺术的名号是以Get开首但以此情势有一个名字为id的参数。这些参数被映射到URI路径中的id字段。这多少个Asp.Net
Web
API框架自动把id参数转换为正确的int数据类型,假如id无效,就会抛出一个HttpResponseException分外。此特别将有框架转换成一个404不当。

其六个:按照连串查找产品音信,在控制器中添加方法如下

1 public IEnumerable<Product> GetProductsByCategory(string category)
2 {
3             return repository.GetAll().Where(y => String.Equals(y.Category, category, StringComparison.OrdinalIgnoreCase));
4 }

一经请求的URI中含有查询字符串,这个Web
API试图在控制器方法的参数中来匹配查询字符串。由此,窗体中“api/products?category=category”的URI将映射到此办法。

第六个:添加一个新产品,在控制器添加的措施如下

1 public Product PostProduct(Product item)
2 {
3             item = repository.Add(item);
4             return item;
5 }

请留意这多少个法子的多少个业务:

     
这么些艺术的名字以“Post”先导,为了创设一个新产品,这些客户端将发送一个HTTP
Post请求。这多少个方法应用类型为Product的参数。在Web
API中复杂类型的参数是从请求信息体中反体系化得到的,因而,我们盼望客户端发送XML或JSON格式的一个出品对象的序列号表现格局

     
此实现会做事,但它还很不完全。理想状态下,我们希望的HTTP响应。包含以下内容:

       响应代码:在默认状况下,那一个Web
API框架设置响应状态码为200(OK)。不过按照这些HTTP/1.1说道,当POST请求在创制一个资源时,这些服务端应该苏醒情形201(Created)。地方:当服务端创立一个资源时,它应当在响应的Location标头中蕴藏那多少个资源的URI。

      ASP.NET Web API使它容易操作HTTP响应音讯。那些改进后的代码:

public HttpResponseMessage PostProduct(Product item)
{
            item = repository.Add(item);
            //创建返回对象HttpResposeMessage并将回复状态设置为201.
            HttpResponseMessage respose = Request.CreateResponse<Product>(HttpStatusCode.Created, item);
            String uri = Url.Link("DefaultApi", new { id = item.Id });
            //设置HttpResposeMessage标头中Locaion
            respose.Headers.Location = new Uri(uri);
            return respose;
}

 
 请注意:此措施重回类型现在是HttpResponseMessage。通过再次来到HttpResponseMessage而不是成品,大家可以操纵HTTP响应消息,包括情形代码和地方标头的详细音讯。

 
CreateResponse方法将会创立HttpResponseMessage,并机关将Product对象连串化表示格局写入到响应新闻的正文中。

  第六个:通过PUT更新产品

1 public void PutProduct(int id,Product product)
2 {
3             product.Id = id;
4             if(!repository.Update(product))
5                 throw new HttpResponseException(HttpStatusCode.NotFound);
6 }

 方法名称以Put起初,这样Web
API就可知将其与PUT请求相匹配。这一个形式有多个参数,一个是产品id和更新的产品,id参数是从URI中赢得的,product参数是从请求正文反系列化得来的。默认境况下,ASP.NET
Web API框架从路由得到简单的参数类型,从呼吁正文获取复杂的项目。

第多少个艺术:删除产品,在控制器添加代码如下。

1  public void DeleteProduct(int id)
2 {
3             Product item = repository.Get(id);
4             if (item == null)
5                 throw new HttpResponseException(HttpStatusCode.NotFound);
6             repository.Remove(id);
7 }

 假使剔除成功,它可以重临状态200(OK)与实业的叙说这场馆;倘若除去仍旧挂起,则赶回状态202(已接受);或状态与从不实体正文204(无内容)。在这种境况下,DeleteProduct方法具有void再次来到类型,因而ASP.NET
Web API自动转换此意况代码204(无内容)

运转测试

  方法创立完毕后我们就可以运行服务端举行测试了

图片 1

 
 上述测试大家发现我们的路由只是“api/{controler}”就水到渠成重返了GetProducts方法中的数据,那也是ASP.NET
Web API与ASP.NET MVC 之间的分别。Web
API路由得以没有{Action},只经过HTTP请求格局来匹配路由,并且路由默认以api启示,如若想要设置,在App_Start中WebApiConfig类中展开安装路由。

图片 2

 

图片 3创立一个Web API项目

率先步,创造以下项目

图片 4

理所当然,你也得以创制一个Web API项目,利用 Web API模板,Web API模板使用
ASP.Net MVC提供API的提携页。

 

添加Controller

       在ASP.NET Web
API中,控制器就是一个甩卖HTTP请求的目的。大家将充分一个控制器,它即可以回去一个货品的列表数据,也可以由此产品编号重回单个产品消息。

        注意,倘使你使用了ASP.NET MVC 已领会控制器,Web
API控制器类似于MVC控制器,可是后续ApiController,而不是Controller类

图片 5

1 namespace WebAPIDemo.Controllers
2 {
3     public class ProductController : ApiController
4     {
5         static IProductRepository repository= new ProductRepository();
6     }
7 }

添加Model

      一个模子就是在你的应用程序中显示数据的一个目的。ASP.NET Web API
能够自动系列化你的模子到JSON,XML或局部其他格式,然后把已系列化的数量写入到HTTP响应信息的正文。只要客户端可以读取连串化的数目,那么它一样可以反系列那些目的。大多数的客户端都足以解析JSON或XML。此外,客户端可以注解它想要通过HTTP请求消息中安装的收纳标头的这种格式。

       然后大家在Models目录下创办一个简单易行的显得商品的Model

namespace WebAPIDemo.Models
{
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Category { get; set; }
        public decimal Price { get; set; }
    }
}

  

添加Repository

     
首先我们需要仓储产品的聚集,分开手机我们的劳动是一个好主意,这种方法,大家得以改变后备存储,而不用修改服务器的实现,这种模型的规划叫做仓储模型,首先创造一个接口

namespace WebAPIDemo.Models
{
   public interface IProductRepository
    {
        IEnumerable<Product> GetAll();
        Product Get(int id);
        Product Add(Product item);
        void Remove(int id);
        bool Update(Product item);
    }
}

 暂时我们把接口和兑现类位居一个索引下,现在在Models目录下增长此外一个类,这一个类将落实IProductRepository接口

 1 namespace WebAPIDemo.Models
 2 {
 3     public class ProductRepository : IProductRepository
 4     {
 5         private List<Product> products = new List<Product>();
 6         private int _nextId = 1;
 7         public ProductRepository()
 8         {
 9             Add(new Product { Name = "一加5", Category = "一加", Price = 2999 });
10             Add(new Product { Name = "小米pro", Category = "小米", Price = 5599 });
11             Add(new Product { Name = "一加X", Category = "一加", Price = 1499 }); 
12         }
13         public Product Add(Product item)
14         {
15             if (item == null)
16                 throw new ArgumentNullException("item");
17             item.Id = _nextId++;
18             products.Add(item);
19             return item;
20         }
21 
22         public Product Get(int id)
23         {
24             return products.Find(y => y.Id == id);
25         }
26 
27         public IEnumerable<Product> GetAll()
28         {
29             return products;
30         }
31 
32         public void Remove(int id)
33         {
34             products.RemoveAll(y => y.Id == id);
35         }
36 
37         public bool Update(Product item)
38         {
39             if (item == null)
40                 throw new ArgumentNullException("item");
41             int index = products.FindIndex(y => y.Id == item.Id);
42             if (index < 0)
43                 return false;
44             products.RemoveAt(index);
45             products.Add(item);
46             return true;
47         }
48     }
49 }

相关文章

网站地图xml地图