一、新建一个Common的类库项目并新建一个测试用的Contact实体类
1 namespace Common 2 { 3 public class Contact 4 { 5 public string Id { get; set; } 6 public string Name { get; set; } 7 public string PhoneNum { get; set; } 8 public string EmailAddress { get; set; } 9 public string Address { get; set; }10 }11 }
二、新建一个WebApi的类库项目并新建一个测试用的ContactsController类
表现为HttpController 的Web AP1定义在WebApi项目之中,我们一般将ApiController作为继承的基类。ApiControIIcr定义在
“system.Web Httpd1” 程序集中,我们可以在目录“%ProgramFiles%Microsoft ASP.NET\ASP.NET Web Stack 5\Packages” 中找到这个程序集。具体来说,该程序集存在于子目录“Microsoft.AspNet.WebApi.Core.5.0.0\lib\net45” 中。Web API体现在如下所示的ContactsController类型中。在该类型中,我们定义了Get、Post、Put和Delete这4个Action方法,它们分别实现了针对联系人的查询、添加、修改和删除操作。Action方法Get具有一个表示联系人ID的可缺省参数,如果该参数存在则返回对应的联系人,否则返回整个联系人列表。由于ASP.NET Web API默认实现了Action方法与HTTP方法的映射,所以方法名也体现了它们各自所能处理的请求必须采用的HTTP方法。
1 using System.Collections.Generic; 2 using System.Linq; 3 using System.Web.Http; 4 using Common; 5 6 namespace WebApi 7 { 8 public class ContactsController : ApiController 9 {10 private static readonly ListContacts;11 12 static ContactsController()13 {14 Contacts = new List 15 {16 new Contact17 {18 Id = "001",19 Name = "张三",20 PhoneNum = "12345678",21 EmailAddress = "zhangsan@gmail.com",22 Address = "add1"23 },24 new Contact25 {26 Id = "002",27 Name = "李四",28 PhoneNum = "23456789",29 EmailAddress = "lisi@gmail.com",30 Address = "add2"31 }32 };33 }34 35 public IEnumerable Get(string id = null)36 {37 return from contact in Contacts where contact.Id == id || string.IsNullOrWhiteSpace(id) select contact;38 }39 40 public void Post(Contact contact)41 {42 Contacts.Add(contact);43 }44 45 public void Put(Contact contact)46 {47 Contacts.Remove(Contacts.First(c => c.Id == contact.Id));48 Contacts.Add(contact);49 }50 51 public void Delete(string id)52 {53 Contacts.Remove(Contacts.First(c => c.Id == id));54 }55 }56 }
三,新建一个ASP.NET Web项目并修改Global.asax.cs文件
除了在Application_Start中加入路由配置外,还需要在此项目中引用之前创建的WebApi项目
1 using System; 2 using System.Web; 3 using System.Web.Http; 4 using System.Web.Routing; 5 6 namespace WebHost 7 { 8 public class Global : HttpApplication 9 {10 protected void Application_Start(object sender, EventArgs e)11 {12 RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");13 14 // 全局路由表HttpRouteCollection对象的扩展方法MapHttpRoute来完成15 GlobalConfiguration.Configuration.Routes.MapHttpRoute("defaultApi", "api/{controller}/{id}", new {id = RouteParameter.Optional});16 }17 }18 }
四,测试
用Chrome默认一application/xml的Content-Type返回,IE则默认以application/json的Content-Type返回;
我这边用Chrome测试的返回结果:
请求URL:http://localhost/webhost/api/contacts
add1 zhangsan@gmail.com 001 张三 12345678 add2 lisi@gmail.com 002 李四 23456789
请求URL:http://localhost/webhost/api/contacts/001
add1 zhangsan@gmail.com 001 张三 12345678