以Web Host的方式来寄宿Web API

一、新建一个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>

  

posted @ 2015-07-28 14:59  FrankYou  阅读(1974)  评论(0编辑  收藏  举报