一、新建一个Common的类库项目并新建一个测试用的Contact实体类

 namespace Common
{
public class Contact
{
public string Id { get; set; }
public string Name { get; set; }
public string PhoneNum { get; set; }
public string EmailAddress { get; set; }
public string Address { get; set; }
}
}

二、新建一个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方法。

 using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using Common; namespace WebApi
{
public class ContactsController : ApiController
{
private static readonly List<Contact> Contacts; static ContactsController()
{
Contacts = new List<Contact>
{
new Contact
{
Id = "",
Name = "张三",
PhoneNum = "",
EmailAddress = "zhangsan@gmail.com",
Address = "add1"
},
new Contact
{
Id = "",
Name = "李四",
PhoneNum = "",
EmailAddress = "lisi@gmail.com",
Address = "add2"
}
};
} public IEnumerable<Contact> Get(string id = null)
{
return from contact in Contacts where contact.Id == id || string.IsNullOrWhiteSpace(id) select contact;
} public void Post(Contact contact)
{
Contacts.Add(contact);
} public void Put(Contact contact)
{
Contacts.Remove(Contacts.First(c => c.Id == contact.Id));
Contacts.Add(contact);
} public void Delete(string id)
{
Contacts.Remove(Contacts.First(c => c.Id == id));
}
}
}

三,新建一个ASP.NET Web项目并修改Global.asax.cs文件

除了在Application_Start中加入路由配置外,还需要在此项目中引用之前创建的WebApi项目

 using System;
using System.Web;
using System.Web.Http;
using System.Web.Routing; namespace WebHost
{
public class Global : HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}"); // 全局路由表HttpRouteCollection对象的扩展方法MapHttpRoute来完成
GlobalConfiguration.Configuration.Routes.MapHttpRoute("defaultApi", "api/{controller}/{id}", new {id = RouteParameter.Optional});
}
}
}

四,测试

用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>

  

以Web Host的方式来寄宿Web API的更多相关文章

  1. 以Self Host的方式来寄宿Web API

    Common类及实体定义.Web API的定义请参见我的上一篇文章:以Web Host的方式来寄宿Web API. 一.以Self Host寄宿需要新建一个Console控制台项目(SelfHost) ...

  2. ASP.NET Web API路由系统:Web Host下的URL路由

    ASP.NET Web API提供了一个独立于执行环境的抽象化的HTTP请求处理管道,而ASP.NET Web API自身的路由系统也不依赖于ASP.NET路由系统,所以它可以采用不同的寄宿方式运行于 ...

  3. Web Host下的URL路由

    Web Host下的URL路由 ASP.NET Web API提供了一个独立于执行环境的抽象化的HTTP请求处理管道,而ASP.NET Web API自身的路由系统也不依赖于ASP.NET路由系统,所 ...

  4. ASP.NET Web API 框架研究 Web Host模式路由及将请求转出到消息处理管道

    Web Host 模式下的路由本质上还是通过ASP.NET 路由系统来进行路由的,只是通过继承和组合的方式对ASP.NET路由系统的内部的类进行了一些封装,产生自己专用一套类结构,功能逻辑基本都是一样 ...

  5. Web APi之Web Host消息处理管道(六)

    前言 我们知道Web API本身是无法提供请求-响应的机制,它是通过Web Host以及Self Host的寄宿的宿主方式来提供一个请求-响应的运行环境.二者都是将请求和响应抽象成HttpRespon ...

  6. Web Host消息处理管道

    Web Host消息处理管道 前言 我们知道Web API本身是无法提供请求-响应的机制,它是通过Web Host以及Self Host的寄宿的宿主方式来提供一个请求-响应的运行环境.二者都是将请求和 ...

  7. 使用Nancy.Host实现脱离iis的Web应用

    本篇将介绍如何使用Nancy.Host实现脱离iis的Web应用,在开源任务管理平台TaskManagerV2.0代码里面已经使用了Nancy.Host实现自宿主的Web应用.学习Nancy之前最好了 ...

  8. wcf通过webHttpBinding方式发布rest web服务

    <system.serviceModel> <services> <service name="ServiceUpdater.ServiceUpdate&quo ...

  9. Tomcat部署web应用的方式

    对Tomcat部署web应用的方式总结,常见的有以下四种: 1.[使用控制台部署] 访问Http://localhost:8080,并通过Tomcat Manager登录,进入部署界面即可. 2.[利 ...

随机推荐

  1. AD10长方形通孔焊盘的画法

    1.点击工具栏中[放置焊盘]按钮 2.按键盘Tab键弹出[焊盘]对话框 3.设置[空洞信息]相关尺寸(根据自己所需实际设置) 这里左边的单选按钮选择“槽”,通孔尺寸输入20mil,长度为80mil,旋 ...

  2. VS2010 项目引用了微软企业库,但是编译时提示:未能找到类型或命名空间名称

    我写的是控制台程序 是在引用我自己写的库 和 Microsoft.Practices.EnterpriseLibrary 时出现的问题 经过分析,和百度 找到了修改方法 打开  项目属性-->应 ...

  3. 30分钟入门Java8之默认方法和静态接口方法

    30分钟入门Java8之默认方法和静态接口方法 前言 上一篇文章30分钟入门Java8之lambda表达式,我们学习了lambda表达式.现在继续Java8新语言特性的学习,今天,我们要学习的是默认方 ...

  4. 从function前面的!想到的

    最近没事喜欢看看,一些js库的源码,结果发现库前不是加一个!就是加+或者一个(),心中猜出个大概知道这个是让函数自动执行,可是这么多符号达到同一个目的,原理是什么呢,下面做一下剖析: 先从IIFE开始 ...

  5. PowerShell 启动应用程序【转】

    当你在PowerShell中,启动带参数启动可执行应用程序时,可能会碰到参数解析的错误.最好的方式是使用命令 Start-Process,该命令有两个优点: 程序的路径和程序参数分开,可以使用-Fil ...

  6. Guardian of Decency(二分图)

    Guardian of Decency Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submi ...

  7. Visual Studio工具——为编辑器增加垂直辅助线

    原文:<Visual Studio工具> Posted on 2014/03/13 ==================================================== ...

  8. NavMesh系统动态碰撞的探讨

    Unity3D提供的NavMesh系统可以方便的解决游戏的寻路问题,但是该系统有一个比较让人不理解的问题: NavMesh导航时会忽略Physics系统本身的碰撞,也就是说NavMeshAgent在移 ...

  9. 利用 word2vec 训练的字向量进行中文分词

    最近针对之前发表的一篇博文<Deep Learning 在中文分词和词性标注任务中的应用>中的算法做了一个实现,感觉效果还不错.本文主要是将我在程序实现过程中的一些数学细节整理出来,借此优 ...

  10. 资料下载:敏捷个人的成长思考.pptx(第1次线下活动2011.04)

    本文挪至 http://www.zhoujingen.cn/blog/629.html PDF下载地址:http://down.51cto.com/data/207112 推荐:你可能需要的在线电子书 ...