一、新建一個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 List<Contact> Contacts; 11 12 static ContactsController() 13 { 14 Contacts = new List<Contact> 15 { 16 new Contact 17 { 18 Id = "001", 19 Name = "張三", 20 PhoneNum = "12345678", 21 EmailAddress = "zhangsan@gmail.com", 22 Address = "add1" 23 }, 24 new Contact 25 { 26 Id = "002", 27 Name = "李四", 28 PhoneNum = "23456789", 29 EmailAddress = "lisi@gmail.com", 30 Address = "add2" 31 } 32 }; 33 } 34 35 public IEnumerable<Contact> 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
<ArrayOfContact xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Common"> <Contact> <Address>add1</Address> <EmailAddress>zhangsan@gmail.com</EmailAddress> <Id>001</Id> <Name>張三</Name> <PhoneNum>12345678</PhoneNum> </Contact> <Contact> <Address>add2</Address> <EmailAddress>lisi@gmail.com</EmailAddress> <Id>002</Id> <Name>李四</Name> <PhoneNum>23456789</PhoneNum> </Contact> </ArrayOfContact>
請求URL:http://localhost/webhost/api/contacts/001
<ArrayOfContact xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Common"> <Contact> <Address>add1</Address> <EmailAddress>zhangsan@gmail.com</EmailAddress> <Id>001</Id> <Name>張三</Name> <PhoneNum>12345678</PhoneNum> </Contact> </ArrayOfContact>