一、新建一个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. A20(Cubieboard2)启动过程浅析

    A20支持从NAND Flash.SPI NOR Flash.SD card(SDC 0/2)和USB启动.当系统上电时,首先检测Boot Select Pin(BSP)管脚,如果为低电平,则直接从U ...

  2. 使用PowerDesigner导出Word/HTML的一些配置

    目标:根据物理视图导出代码和列清单(包括字段.类型.注释).由于默认导出的要素太多,大多不是自己想要的,这里简单说下导出目标的一些配置,留下来备用. 其中,Title中的图和Table表格中的代码预览 ...

  3. 『Golang』跨平台TUI(基于文字的用户界面)库Terbox-Go文档翻译

    原文 package termbox import "github.com/nsf/termbox-go" termbox-go 是一个用于创建跨平台TUI(基于文本的用户界面)的 ...

  4. 记录一个Word操作技巧,很偏门的,鉴于Google很不方便用了,百度起来比较费劲所以记录一下

    拿到一篇文章需要修改时需要将文中某一段带有特定文字的段落删除,比如一段带有“淘宝网”文字的广告性宣传,且这种段落并不是全都一样,数量也很多,不太可能手动一段一段找到Delete,这就可以用这个替换查找 ...

  5. 在使用sqlite时淌过的坑

    以前一直用sqlite.net 1.0.66.0版本,在.net4下面程序写好了部署到目的地机器时winform程序总是出现缺少运行时的问题.有时装了运行时也还是出问题,后来发现是混合模式的问题,当时 ...

  6. C#通过RFC调用SAP

    using System;using System.Collections.Generic;using SAP.Middleware.Connector;using System.Data;using ...

  7. java-Filter

    java-Filter 过滤器是小型的Web组件,它们负责拦截请求以及响应,以便查看.提取或以某种方式操作正在客户机和服务器之间交换的数据.简单的说,过滤器就类似于客户端发送的web请求与服务器之间的 ...

  8. hbase 使用

    hbase shell命令的使用 再使用hbase 命令之前先检查一下hbase是否运行正常 hadoop@Master:/usr/hbase/bin$ jps HMaster NameNode Se ...

  9. Visual Studio .NET项目转换器(ProjectConverter)修改

    Visual Studio .NET 项目转换器非常类似于ASP.NET版本转换器,区别在于它用于转换 Visual Studio 项目文件的版本.尽管在 .NET 框架的 1.0 版和 1.1 版之 ...

  10. JS思维之路菜鸟也能有大能量-序幕

    准备写一类关于Js的开发思想的文章,这系列文章需要有一定的js基础,在这里不会去说太多的js基础知识,因为这系列文章不是写基础东西,而是一种编程思想,如果你还是js新手,那么建议你有一定基础后再看. ...