一:准备工作

你可以直接下载源码查看

Download the completed project.
     下载完整的项目

  CRUD是指“创建(C)、读取(R)、更新(U)和删除(D)”,它们是四个基本的数据库操作。许多HTTP服务也会通过REST或类REST的API模拟CRUD操作。

  在本教程中,我们将建立一个十分简单的Web API来管理一列产品。

每个产品包含一个name(名称)、price(价格)和category(分类)(如,“toys(玩具)”、“hardware(硬件)”等),还有一个产品的ID。

表2-1. Products API 具有下面几个的HTTP方法

Action
动作
HTTP method
HTTP方法
Relative URI
相对URI
Get a list of all products
获取全部产品列表
GET /api/products
Get a product by ID
通过ID获取一个产品
GET /api/products/id
Get a product by category
通过分类获取产品
GET /api/products?category=category
Create a new product
创建一个新产品
POST /api/products
Update a product
更新一个产品
PUT /api/products/id
Delete a product
删除一个产品
DELETE /api/products/id

注意,有些URI在路径中包含了产品ID。例如,要得到ID为28的产品,客户端要发送一个http://hostname/api/products/28的GET请求。

二:方法

 

 下面来说下增删改查CRUD的四种方法

  1.GET接收指定URI上的资源表达式。GET在服务器上应当没有副效应。(区分URI URL URN)

  2.PUT更新指定URI上的资源。如果服务器允许客户端指定新URI,PUT也可以用于在指定URI上创建新资源。对于本教程,API将不支持通过PUT的创建。

  3.POST创建新资源。服务器为新对象分配URI,并把这个URI作为响应消息的一部分加以返回。

  4.DELETE删除指定URI上的资源。

三:创建一个新的WEBAPI项目

启动VS 2013,并在“开始页”选择“新项目”。或从“文件”菜单选择“新建”,然后选择“项目”。

在“模板”面板中选择“已安装模板”,并展开“Visual C#”节点。选择该节点下的“Web”。在项目模板列表中选择“ASP.NET MVC 4 Web应用程序”。将此项目命名为“ProductStore”,点击“OK”

  

在“新的ASP.NET MVC 4项目”对话框中选择“Web API”,点击“OK”

  

 1.添加模型

    模型是表示你应用程序中数据的一种对象。在ASP.NET Web API中,你可以使用强类型的CRL(公共语言运行时)对象作为模型,而它们将被自动化地序列化成用于客户端的XML或JSON

  对于这个ProductStore API,其数据由产品组成,因此,我们将创建一个名为Product的新类

  如果“解决方案资源管理器”此时尚不可见,点击“视图”菜单,并选择“解决方案资源管理器”。在“解决方案资源管理器”中,右击“Models”文件夹。从上下菜单中选择“添加”,然后选择“类”。将这个类命名为“Product”(如图)

  

  将以下属性添加到这个Product类。

  

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5.  
  6. namespace ProductStore.Models
  7. {
  8. public class Product
  9. {
  10. public int Id { get; set; }
  11. public string Name { get; set; }
  12. public string Category { get; set; }
  13. public decimal Price { get; set; }
  14. }
  15. }

  2.添加存储库

    我们需要存储产品集合。将这个集合与我们的服务实现分开是一种好的思想。这样,我们可以修改后台存储而不必重写服务类。这种设计类型称为存储库模式。首先从定义存储库的泛型接口开始

  在“解决方案资源管理器”中,右击“Models”文件夹。选择“添加”,然后选择“新项”

    

  

  在“模板”面板中,选择“已安装模板”,并展开“C#”节点,选择“代码”。在代码模板列表中选择“接口”。将此接口命名为“IProductRepository”

  

  添加以下实现:

  

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace ProductStore.Models
  8. {
  9. interface IProductRepository
  10. {
  11. IEnumerable<Product> GetAll();
  12. Product Get(int id);
  13. Product Add(Product item);
  14. void Remove(int id);
  15. bool Update(Product item);
  16. }
  17. }

  现在,把另一个类添加到Models文件夹,名称为“ProductRepository”。这个类将实现这个IProductRespository接口。添加以下实现

  

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5.  
  6. namespace ProductStore.Models
  7. {
  8. //实现接口IProductRepository的方法
  9. public class ProductRepository : IProductRepository
  10. {
  11. private List<Product> products = new List<Product>();//实例化一个产品集合
  12. private int _nextId = ;
  13. //构造函数
  14. public ProductRepository()
  15. {
  16. Add(new Product { Name = "Tomato soup", Category = "Groceries", Price = 1.39M });
  17. Add(new Product { Name = "Yo-yo", Category = "Toys", Price = 3.75M });
  18. Add(new Product { Name = "Hammer", Category = "Hardware", Price = 16.99M });
  19. }
  20. //获取所有产品
  21. public IEnumerable<Product> GetAll()
  22. {
  23. return products;
  24. }
  25. //查询某一个产品信息
  26. public Product Get(int id)
  27. {
  28. return products.Find(p => p.Id == id);
  29. }
  30. //添加方法
  31. public Product Add(Product item)
  32. {
  33. if (item == null)
  34. {
  35. throw new ArgumentNullException("item");
  36. }
  37. item.Id = _nextId++;
  38. products.Add(item);
  39. return item;
  40. }
  41. //删除某一个产品方法
  42. public void Remove(int id)
  43. {
  44. products.RemoveAll(p => p.Id == id);
  45. }
  46. //更新方法
  47. public bool Update(Product item)
  48. {
  49. if (item == null)
  50. {
  51. throw new ArgumentNullException("item");
  52. }
  53. int index = products.FindIndex(p=>p.Id==item.Id);
  54. if (index == -)
  55. {
  56. return false;
  57. }
  58. products.RemoveAt(index);
  59. products.Add(item);
  60. return true;
  61. }
  62. }
  63. }

  

  该存储库在本地内存中保持了一个产品列表。对一个教程而言这就行了,但在一个真实应用程序中,你要在外部存储这些数据,可以是一个数据库,或是云存储库。这种存储库模式会使今后对这个实现的修改很容易

  

  3.添加Web API控制器

    如果你曾使用过ASP.NET MVC,对控制器是熟悉的。在ASP.NET Web API中,控制器是一种处理客户端HTTP请求的类。“新项目”向导在创建项目时,为你创建了两个控制器。要看到它们,可以在“解决方案资源管理  器”中展开Controllers文件夹。

  (1).HomeController一个传统的ASP.NET MVC控制器。它负责对网站的HTML页面进行服务,而与Web API无直接关系。

  (2).ValuesController是一个WebAPI控制器例子。

  继续并删除这个ValuesController,在“解决方案资源管理器”中右击这个文件,并选择“删除”。现在,添加一个新控制器,操作如下:

  在“解决方案资源管理器”中,右击Controllers文件夹。选择“添加”,然后选择“控制器”

  

  在“添加控制器”向导中,将此控制器命名为“ProductsController”。在“模板”下拉列表中选择“空的API控制器”。然后点击“添加”

  

  注意是空api控制器不是空控制器

  “添加控制器”向导将在Controllers文件夹中创建一个名为ProductsController.cs的文件。如果这个文件尚未打开,双击此文件打开它。添加以下的using语句

  

  1. using ProductStore.Models;

  添加一个保存IProductRepository实例的字段

  1. using ProductStore.Models;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Net.Http;
  7. using System.Web.Http;
  8.  
  9. namespace ProductStore.Controllers
  10. {
  11. public class ProductsController : ApiController
  12. {
  13. static readonly IProductRepository repository = new ProductRepository();
  14.  
  15. }
  16. }

   4.增删改查方法

    这个ProductStore API      具体代码在Model 文件夹中的ProductRepository类中查看

创建支持CRUD(增删改查)操作的Web API(二)的更多相关文章

  1. MybatisPlus核心功能——实现CRUD增删改查操作 (包含条件构造器)

    CRUD 官方文档:https://baomidou.com/ (建议多看看官方文档,每种功能里面都有讲解)[本文章使用的mybatisplus版本为3.5.2] 条件构造器 一般都是用service ...

  2. java实现hbase数据库的增删改查操作(新API)

    操作环境: java版本:    jdk 1.7以上 hbase 版本:1.2.x hadoop版本:2.6.0以上 实现功能: 1,创建指定表 2,删除指定表 3,根据表名,行键,列族,列描述符,值 ...

  3. yii2-basic后台管理功能开发之二:创建CRUD增删改查

    昨天实现了后台模板的嵌套,今天我们可以试着创建CRUD模型啦 刚开始的应该都是“套用”,不再打算细说,只把关键的地方指出来. CRUD即数据库增删改查操作.可以理解为yii2为我们做了一个组件,来实现 ...

  4. (转)SQLite数据库增删改查操作

    原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...

  5. Android SQLite 数据库 增删改查操作

    Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...

  6. 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序

    使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻 ...

  7. python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)

    一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...

  8. 如何搭建一个WEB服务器项目(二)—— 对数据库表进行基本的增删改查操作

    使用HibernateTemplate进行增删改查操作 观前提示:本系列文章有关服务器以及后端程序这些概念,我写的全是自己的理解,并不一定正确,希望不要误人子弟.欢迎各位大佬来评论区提出问题或者是指出 ...

  9. 国产化之路-统信UOS + Nginx + Asp.Net MVC + EF Core 3.1 + 达梦DM8实现简单增删改查操作

    专题目录 国产化之路-统信UOS操作系统安装 国产化之路-国产操作系统安装.net core 3.1 sdk 国产化之路-安装WEB服务器 国产化之路-安装达梦DM8数据库 国产化之路-统信UOS + ...

随机推荐

  1. (转)Asp.NetURL重写的一种方法

    说到不用设置iis,主要是为了实现在虚拟主机或是拿不到iis操作限的时候,不能添加isap又想实现类似于静态化的程序实现方式,先声明,这里最终要实现的效果是,最终可以用 12345.html 替换 s ...

  2. json 转 javaBean

    前言:经常在网络上看见一些关于json自动转换成javaBean的jar包,项目组里的人也在用,稍稍研究了下,都是用的反射来做的.我细细想了下里面的逻辑,我觉得直接生成JavaBean代码岂不是更加直 ...

  3. Oracle中用一张表的字段更新另一张表的字段

    今天在做项目的过程中,发现开发库中某张表的某字段有许多值是空的,而测试库中该字段的值则是有的. 那么,有什么办法能将测试库中该字段的值更新到开发库中呢? SQL Server中这是比较容易解决的,而O ...

  4. iOS--NSNetService和NSNetServiceBrowser(Bonjour网络编程)

    Cocoa 网络框架: Cocoa 网络框架有三层,最底层的是基于 BSD socket库,然后是 Cocoa 中基于 C 的 CFNetwork,最上面一层是 Cocoa 中 Bonjour.通常我 ...

  5. redis研究之watch

    具体的看注释,代码如下: public static void TransTest() { RedisClient client1 = new RedisClient(host, port); Red ...

  6. UVA 10881 Piotr's Ants(等效变换 sort结构体排序)

    Piotr's AntsTime Limit: 2 seconds Piotr likes playing with ants. He has n of them on a horizontal po ...

  7. hdu 1286 找新朋友 (欧拉函数)

    Problem Description 新年快到了,"猪头帮协会"准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的 ...

  8. [翻译]ASP.NET Web API的路由

    原文:Routing in ASP.NET Web API 在我们新建一个Web API项目时,会在App_Start文件夹下的WebApiConfig.cs中定义一个默认路由: config.Rou ...

  9. XSS漏洞(跨站脚本)

    不要轻信用户提交上来的数据alert消息太难看,因此开发一个aspx页面用来统一展示消息ShowMessage.ashx //主页将判断重定向到另一个页面 if (TextBox1.Text != & ...

  10. IIS原理学习

    IIS 原理学习 首先声明以下内容是我在网上搜索后整理的,在此只是进行记录,以备往后查阅只用. IIS 5.x介绍 IIS 5.x一个显著的特征就是Web Server和真正的ASP.NET Appl ...