以Web Host的方式来寄宿Web API
一、新建一个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的更多相关文章
- 以Self Host的方式来寄宿Web API
Common类及实体定义.Web API的定义请参见我的上一篇文章:以Web Host的方式来寄宿Web API. 一.以Self Host寄宿需要新建一个Console控制台项目(SelfHost) ...
- ASP.NET Web API路由系统:Web Host下的URL路由
ASP.NET Web API提供了一个独立于执行环境的抽象化的HTTP请求处理管道,而ASP.NET Web API自身的路由系统也不依赖于ASP.NET路由系统,所以它可以采用不同的寄宿方式运行于 ...
- Web Host下的URL路由
Web Host下的URL路由 ASP.NET Web API提供了一个独立于执行环境的抽象化的HTTP请求处理管道,而ASP.NET Web API自身的路由系统也不依赖于ASP.NET路由系统,所 ...
- ASP.NET Web API 框架研究 Web Host模式路由及将请求转出到消息处理管道
Web Host 模式下的路由本质上还是通过ASP.NET 路由系统来进行路由的,只是通过继承和组合的方式对ASP.NET路由系统的内部的类进行了一些封装,产生自己专用一套类结构,功能逻辑基本都是一样 ...
- Web APi之Web Host消息处理管道(六)
前言 我们知道Web API本身是无法提供请求-响应的机制,它是通过Web Host以及Self Host的寄宿的宿主方式来提供一个请求-响应的运行环境.二者都是将请求和响应抽象成HttpRespon ...
- Web Host消息处理管道
Web Host消息处理管道 前言 我们知道Web API本身是无法提供请求-响应的机制,它是通过Web Host以及Self Host的寄宿的宿主方式来提供一个请求-响应的运行环境.二者都是将请求和 ...
- 使用Nancy.Host实现脱离iis的Web应用
本篇将介绍如何使用Nancy.Host实现脱离iis的Web应用,在开源任务管理平台TaskManagerV2.0代码里面已经使用了Nancy.Host实现自宿主的Web应用.学习Nancy之前最好了 ...
- wcf通过webHttpBinding方式发布rest web服务
<system.serviceModel> <services> <service name="ServiceUpdater.ServiceUpdate&quo ...
- Tomcat部署web应用的方式
对Tomcat部署web应用的方式总结,常见的有以下四种: 1.[使用控制台部署] 访问Http://localhost:8080,并通过Tomcat Manager登录,进入部署界面即可. 2.[利 ...
随机推荐
- Cubieboard2裸机开发之(五)看门狗操作
前言 说到看门狗,应该不会陌生,看门狗说白了就是一个定时器,但是它有一个非常重要的功能就是复位系统.在A20里,看门狗的操作非常简单,只有两个寄存器,不需要操作时钟相关的东西,系统起来后可以直接使用, ...
- S1700
- linux下备份mysql命令
一,数据库的备份与导入 1),数据库的备份 1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名例:mysqldump -u dbadmin -p myblog ...
- FFmpeg编译出错_img_convert 找不到
问题出现在下载的ffmpeg的版本不一样,在0.4.8以前的版本中还有img_convert这个函数,新版本中用sws_getContext和sws_scale代替了.简单说明如下: 新版本的ffmp ...
- [转]SharePoint开发中可能用到的各种Context(上下文)
SharePoint是一个B/S结构的产品,所以在开发过程中会使用到各种各样的上下文(Context)信息,借此机会来总结一下.特别是Javascript的Ctx非常实用,这里记录一下! 一.Http ...
- cron语法
最近在搞whenever时看到可以用cron语法设置定时任务.所以研究了下cron 语法. every '0 0 27-31 * *' do command "echo 'you can u ...
- 我所研究过的 ASP.NET MVC 或者 .NET 或者 ORM 或者框架的开源项目
ASP.NET MVC 的开源项目有很多,这里列出我所研究过的: SocialGoal v1.0.0 prodinner nopCommerce SmartStore.NET 由于今天才做收集工作,可 ...
- codeforces B. Friends and Presents(二分+容斥)
题意:从1....v这些数中找到c1个数不能被x整除,c2个数不能被y整除! 并且这c1个数和这c2个数没有相同的!给定c1, c2, x, y, 求最小的v的值! 思路: 二分+容斥,二分找到v的值 ...
- ruby -- 进阶学习(五)使用Ckeditor插件上传中文图片
基于rails4.0环境 当使用Ckeditor上传中文命名图片时报错,解决方法是对图片进行重命名 在Ckeditor插件的安装目录下找到controllers/.../application.rb ...
- Android 学习笔记之Volley(八)实现网络图片的数据加载
PS:最后一篇关于Volley框架的博客... 学习内容: 1.使用ImageRequest.java实现网络图片加载 2.使用ImageLoader.java实现网络图片加载 3.使用NetWork ...