主页 > 知识库 > 网络编程 > ASP/.NET >

ASP.NET MVC4中调用WEB API的四个方法(一)(4)

来源: 作者: 发表于:2012-06-11 08:23  点击:
当今的软件开发中,设计软件的服务并将其通过网络对外发布,让各种客户端去使用服务已经是十分普遍的做法。就.NET而言,目前提供了Remoting,WebService和WCF服务,这都能开发出功能十分强大的服务。然而,越来越多

当今的软件开发中,设计软件的服务并将其通过网络对外发布,让各种客户端去使用服务已经是十分普遍的做法。就.NET而言,目前提供了Remoting,WebService和WCF服务,这都能开发出功能十分强大的服务。然而,越来越多的互联网应用,希望将服务只是通过HTTP发布出去,而不是使用复杂的SOAP协议。为了解决这个问题,ASP.NET WebAPI就出现了。

  ASP.NET API简单来说就是对REST协议进行了充分的支持,可以使用HTTP中的GET,POST,PUT和DELETE进行服务的发布。在本文中,将以例子说明如何使用ASP.NET WEB API去创建一个REST风格的Web服务,并且如何编写客户端对其进行连接,此外在文中还将学会如何通过HTTP协议,使用Entity Framework和SQL Server去创建一个CRUD(增删改)的应用程序。本文的阅读对象为具备一定ASP.NET MVC基础的用户。

  前期准备

  为了继续本文的学习,首先需要安装ASP.NET MVC4和JSON.net,ASP.NET Web API是ASP.NET MVC 4 BETA版的一部分,可以从下面这个地址下载得到:http://www.asp.net/mvc/mvc4。

  此外,还需要下载Json.NET,它是一个在.NET中高性能的对JSON进行解析处理的类库,下载地址在:http://json.codeplex.com/releases/view/82120, 在本文的学习中,将会用到Json.net。

  创建ASP.NET MVC4 WEB API应用

  下面,首先打开VS.NET 2010,然后建立一个新的项目,选择使用C#语言,然后选择ASP.NET MVC4 WEB APPLICATION,再选择使用Web API 模板,如下两个图所示:

  在建立好工程项目后,会发现项目的目录结构跟普通的MVC结构是差不多的,但其中会发现在Controller文件夹中,会发现多一个ValuesController的类文件,这个类是Web API的控制器类,它继承了ApiController类,而不是一般MVC框架中的Controller类,代码如下:


public class ValuesController : ApiController
  
{
  
...
  
}



  ValuesController类会自动生成一个基于REST风格的脚手架,以方便用户进行编码,其中提供了GET,POST,PUT和DELETE方法。下面的表格详细列出了每个HTTP方法的含义:

  要注意的是,Wep API 本身不会指定以上这些方法中每个方法的具体处理流程,比如,对于服务端的文件系统,可以使用XML数据或者自定义数据存储格式,从而在这些方法中使用,主要是根据目标的操作类型和数据的存储形式,以上这些方法可以接收所需要的数据类型。

  在我们继续操作前,先在项目的根目录下创建一个新的名为API的文件夹,并且将ValuesController.cs这个文件放到其中,这样做的目的,主要是为了将Web API控制器跟普通的MVC控制器进行分离,方便今后的开发。


  利用Entity Framework创建数据层

  现在,往Models文件夹中,新增一个Entity Framework数据实体。我们使用的是Northwind数据库中的Customers表进行操作,命名数据实体为Northwind,如下图:

  之后,选择customer表,创建一个数据实体customer如下:

  Web API控制器的编码

  接下来,我们对已经生成了框架的Web控制器进行完善其中的代码,代码如下:


 

public class CustomersController : ApiController
  
 {
  
 //Select All
  
 public IEnumerable Get()
  
 {
  
 NorthwindEntities db = new NorthwindEntities();
  
 var data = from item in db.Customers
  
 orderby item.CustomerID
  
 select item;
  
 return data.ToList();
  
 }
  
 //Select By Id
  
 public Customer Get(string id)
  
 {
  
 NorthwindEntities db = new NorthwindEntities();
  
 var data = from item in db.Customers
  
 where item.CustomerID == id
  
 select item;
  
 return data.SingleOrDefault();
  
 }
  
 //Insert
  
 public void Post(Customer obj)
  
 {
  
 NorthwindEntities db = new NorthwindEntities();
  
 db.Customers.AddObject(obj);
  
 db.SaveChanges();
  
 }
  
 //Update
  
 public void Put(string id, Customer obj)
  
 {
  
 NorthwindEntities db = new NorthwindEntities();
  
 var data = from item in db.Customers
  
 where item.CustomerID == id
  
 select item;
  
 Customer old = data.SingleOrDefault();
  
 old.CompanyName = obj.CompanyName;
  
 old.ContactName = obj.ContactName;
  
 old.Country = obj.Country;
  
 db.SaveChanges();
  
 }
  
 //Delete
  
 public void Delete(string id)
  
 {
  
 NorthwindEntities db = new NorthwindEntities();
  
 var data = from item in db.Customers
  
 where item.CustomerID == id
  
 select item;
  
 Customer obj = data.SingleOrDefault();
  
 db.Customers.DeleteObject(obj);
  
 db.SaveChanges();
  
 }
  
 }



  其中,Get()方法返回了Customers表中的所有数据,是以LIST列表的形式返回的。customer表中的主键为CustomerId列,并且是字符串类型,因此,另外的一个get带参数的方法,是根据传入的ID参数返回了某一个customer的对象实例。

  Post()方法则接收一个Customer对象作为参数,并且将其新增到数据表中去,同样,Put()方法中,接收一个customerid,然后在数据表中找出该customer对象,为该customer对象的属性重新赋值,然后再保存;最后Delete方法根据传入的CustomerID参数删除数据表中的数据并保存。


  从浏览器中访问WEB API

  在通过普通页面作为客户端访问Web API前,首先在浏览器中通过输入地址的方法先测试一下,如下图:

  注意的是,访问API的方式为:localhost/api/customers,在实际中将要根据情况替换合适的端口,默认所有的WEB API都是通过/api根目录的方式访问的,该路由是在Global.asax下进行定义,如下:


 

public static void RegisterRoutes(RouteCollection routes)
  
 {
  
 ...
  
 routes.MapHttpRoute(
  
 name: "DefaultApi",
  
 routeTemplate: "api/{controller}/{id}",
  
 defaults: new { id = RouteParameter.Optional }
  
 );
  
 ...
  
 }


有帮助
(0)
0%
没帮助
(0)
0%