在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
ASP.NET MVC 4 包含了 ASP.NET Web API, 这是一个创建可以连接包括浏览器、移动设备等多种客户端的 Http 服务的新框架, ASP.NET Web API 也是构建 RESTful 服务的理想平台。 ASP.NET Web API 特性ASP.NET Web API 包含下列特性:
第一个 Web API 程序从零开始创建 Web API 项目1、 创建一个空的 ASP.NET 4.0 网站项目 2、 添加对 System.Net.Http , System.Net.Http.Formatting , System.Web.Http , System.Web.Http.Common , System.Web.Http.WebHost 的引用 3、 添加 Global Application Class , 并在 Global 类中的 Application_Start 方法中添加如下代码: RouteTable.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); 4、添加一个 ProductsController , 继承自 ApiController , 代码如下: public class ProductController : ApiController { public IQueryable 5、 在浏览器输入 URI 访问资源, 也可以通过脚本等任何客户端进行访问, 以浏览器为例: 在地址栏输入 http://localhost:64334/api/products 将会访问到 GetAllProducts 方法, 返回所有的 Product 实例; 在地址栏输入 http://localhost:64334/api/products /1 将会访问到 GetProductById 方法, 返回指定 id 的 Product 实例; 理解 API 路由对于每一个 Http 消息, ASP.NET Web API 框架通过路由表决定由哪个控制器处理请求。 当你创建一个新的 Web API 项目时, 将会包含一个类似这样的一个默认的路由: /api/{controller}/{id} {controller} 和 {id} 是两个占位符, 当遇到一个符合这种样式的 URI , 将将会开始寻找合适的控制器方法进行调用, 规则如下:
这里有一些请求的例子, 以及基于当前实现情况的的 HTTP 动作结果:
在第一个例子中, 与 "products" 相匹配的是 ProductsController , HTTP 请求的方法是 GET , 所以框架开始在 ProductController 类里面寻找以 “Get” 开头的方法, 此外, URI 中没有提供 id 参数, 所以框架要找一个没有参数的方法, 最后, ProductsController 的 GetAllProducts 方法满足要求。 第二个例子与第一个类似, 不同的是 URI 里面包含了 {id} 参数。 因此, 框架调用 GetProduct 方法, 因为它需要一个名称为 id 参数。 值得注意的是, URI 里面的 id 参数是字符串类型的 “5” , 框架会根据方法的签名自动把它转换成整形。 在第三个例子中, 客户端发起 HTTP Post 请求, 框架寻找名称以 “Post” 开始的方法。 而 ProductController 类没有这样的方法, 所以框架返回的 HTTP 状态码是 405 , 表示不允许调用的方法 (Method Not Allowed) 。 再看第四个例子, 客户端发送一个 GET 请求到 /api/users 。 框架寻找名称为 UserController 的控制器, 这样的类还没有定义, 所以框架返回的 HTTP 状态码是 404 , 表示请求的资源未找到。 Web API CURD什么是 CURDCURD 是指 Create 、 Update 、 Read 、 Delete 四个简单的数据库操作, 通常大多数 Web 服务也通过 REST 风格的服务提供这些操作。 接下来将继续完善 ProductsController 以支持下面所有的操作:
资源ProductController 提供了两种 URI 资源:
HTTP 的四个主要方法 (GET, PUT, POST, DELETE) 按照下列方式映射为 CURD 操作:
实现 CURD新建资源客户端发起 HTTP POST 请求新建资源, 为了能处理 POST 请求, 需要在 ProductController 定义一个以 Post 开头的方法, 这个方法接受一个类型为 Product 的参数。 根据 HTTP/1.1 协议, 需要注意的问题有:
新建资源的最终代码如下: public HttpResponseMessage 更新资源内容更新是比较简单的, 代码如下: public HttpResponseMessage PutProduct(int id, Product product) { if (!this._dbContext.Products.Any(p => p.ProductID == id)) { throw new HttpResponseException(HttpStatusCode.NotFound); } product.ProductID = id; this._dbContext.Update(product); return new HttpResponseMessage(HttpStatusCode.OK); } 该方法需要两个参数, id 从 URI 中获取, product 从客户端请求消息中获取。 删除资源根据 HTTP 协议, 删除应当是幂等的, 也就是说一个 URI 上接受到多少个删除请求都是相同的, 如果资源已经被删除, 也不能返回错误的响应代码。 如果成功删除了资源, 可以返回 200 (OK) 响应代码, 以及一个实体进行状态说明, 或者返回 204 (No Content)。 如果删除需要等待事务完成, 则应该返回 202 (Accepted) 。 删除资源的实现代码如下: public HttpResponseMessage DeleteProduct(int id) { var product = this._dbContext.Products.FirstOrDefault(p => p.ProductID == id); this._dbContext.Delete(product); return new HttpResponseMessage(HttpStatusCode.NoContent); } |
请发表评论