2013年08月08日 ⁄ 综合 ⁄ 共 554字 ⁄ 字号 ⁄ 评论关闭

【1】.部署环境.net4及以上版本。

【2】.vs2010  开发需单独安装vs2010 sp1和mvc4

mvc4:http://www.asp.net/mvc/mvc4

【3】.开发

1.新建项目选择ASP.net MVC 4 Web应用程序

2.选择Web API

3.在新建立的项目里面有已经生成的webapi模版

其中App_Start文件夹下WebApiConfig.cs和RouteConfig.cs文件主要配置api的路由信息。

Controllers文件夹下的文件为api的实现文件。其中ValuesController.cs是示例api文件。

4.新建自己的webapi文件。

在Controllers文件夹上单击鼠标右键,添加--控制器,我们新建一个TestApiController.cs的文件。其中TestApi是我们的Controller的名称在路由中使用。

5.我们新加入两个Get方法api,一个带参一个不带参

6.在WebApiConfig.cs文件中配置路由路径:routeTemplate: "api/{controller}/{Action}/{id}",

然后运行项目我们在地址栏中输入

controller:TestApi

action:我们写的方法名

id:传入的参数

7.同样我们可以写入Post方法等等。

WCF Web API支持多个宿主环境:自宿主(windows服务或者控制台)和IIS宿主(asp.net webform/mvc)。这个入门文章主要演示在ASP.NET MVC3网站宿主:

  • 如何使用NuGet向项目中添加Web Api引用
  • 如何创建一个通过HTTP GET访问的Web Api
  • 如何通过asp.net routes宿主一个Web Api
  • 如何通过浏览器或者Fiddler访问Web Api
  • 如何在Api上启用OData uri查询
  • 如何用WCF Web Test Client测试WCF Web API

1、创建一个基本的解决方案:使用VS2010新建一个空的ASP.NET MVC 3 Web Application

设置站点的端口号为9000

2、向解决方案中加入Web Api的引用

通过NuGet来添加Web api的程序集引用,右击项目属性,选择“Manage NuGet Packages”

在NuGet管理扩展器上查询Online的”webapi.all“

选择安装,NuGet就会下载所有所需的软件包,现在可以开始开发Web Api。

3、创建一个Contacts Api类

右击项目ContactManager选择添加一个文件夹,取名”APIs“,然后在APIs文件夹上右击添加类,类名叫做ContactsApi:

using System.ServiceModel;
namespace ContactManager.APIs
{
[ServiceContract]
public class ContactsApi
{
}
}
ContractsApi 加了ServiceContractAttribute表示这是一个WCF 服务,将通过HTTP方式暴露出来。
4、通过asp.net routing注册ContractsApi
Api需要通过asp.net mvc宿主,使用ASP.net Route的MapServiceRoute扩展方法把它注册进去。切换到global.asax.cs文件,添加以下引用
using ContactManager.APIs;
using System.ServiceModel.Activation;
在RegisterRoutes方法里加入下述代码
routes.Add(new ServiceRoute("api/contacts", new HttpServiceHostFactory(), typeof(ContactsApi)));
 
下面的黄色部分很重要,MVC的默认路由是映射到controller + action
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new ServiceRoute("api/contacts", new HttpServiceHostFactory(), typeof(ContactsApi)));
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}

MapServiceRoute需要一个泛型参数指定服务(API),以及一个将被追加到IIS base url的路径。在这里,我们指定的“contacts”,也就是宿主为“http://localhost:9000/api/contacts”。

5. 通过一个HTTP Get 方法暴露contacts:首先创建一个poco(Plain Old C#)Contract类,代表我们在api上传递的联系人,本质上就是一个DTO(数据传输对象),在HTTP上我们把它作为资源,然后创建一个HTTP Get方法暴露资源。

右击项目ContactManager项目选择添加新的文件夹“Resources”,在Resources文件下创建一个新的类Contact。

namespace ContactManager.Resources
{
public class Contact
{
public int ContactId { get; set; }
public string Name { get; set; }
}
}

返回到ContactApi类,添加下述引用:

using System.ServiceModel.Web;
using ContactManager.Resources;

添加一个Get方法返回所有的contracts

[WebGet(UriTemplate = "")]
public IQueryable<Contact> Get()
{
var contacts = new List<Contact>()
{
new Contact {ContactId = 1, Name = "Phil Haack"},
new Contact {ContactId = 2, Name = "HongMei Ge"},
new Contact {ContactId = 3, Name = "Glenn Block"},
new Contact {ContactId = 4, Name = "Howard Dierking"},
new Contact {ContactId = 5, Name = "Jeff Handley"},
new Contact {ContactId = 6, Name = "Yavor Georgiev"}
};
return contacts.AsQueryable();
}

Get方法上加了WebGet Attribute表示这是一个HTTP Get。注意这里的UriTemplate被设置为“”,默认情况下,操作的Uri是方法名Get,在这种情况下,我们是在Route中设置的Uri。

6、通过浏览器查询Contracts.按F5运行项目,然后再浏览器地址栏中输入http://localhost:9000/api/contacts

7、查询返回Json格式的Contracts。HTTP提供了一些“内容协商”机制 — 当有多个可得的表现形式的时候,对特定的响应选择最好的表现形式的处理过程。

服务器驱动协商(Server-driven Negotiation)

如果响应的最好的表现形式的选择是通过服务器上的算法来实现,那么这种方式的协商称做服务器驱动协商。选择是基于响应可得的表现形式(根据不同的维度,响应会不同;例如,语言,内容编码,等等)和请求消息里特定的头域或关于请求的其他信息(如:网络客户端的地址)。
服务器驱动协商是有优点的,当从可行的表现形式里进行选择的算法对用户代理进行描述是比较困难的时候,或者当服务器期望发送“最好的猜测”给客户端而只通过一个响应(以避免后续请求的回路(一个请求会返回一个响应)延迟如果此“最好的猜测“对用户适合的时候)的时候。为了改善服务器的猜测,用户代理应该包含请求头域(Accept,Accept-Language,Accept-Encoding,等等),这些头域能描述它对响应的喜好。

Web api返回的响应很容易添加一种媒体类型(media types )。

打开Fiddler,在“Request builder”栏输入地址“http://localhost:9000/api/contacts”,然后移动到“Request Headers”在“User-Agent” 项下方添加 “Accept: application/json”

按下 Exectue按钮,双击左边的Panel查看HTTP的response,切换到“Raw”Tab,你可以看到下面的json格式的数据:

8、启用OData 查询支持

Web API支持OData协议,接受OData的URI格式查询,当OData 查询到达Web Api, 在返回客户端之前在服务端会进行必要的过滤和排序。查询使用IQueryable 接口,服务端并没有去查询所有的数据,发送过滤和排序到服务端。

return contacts.AsQueryable();

运行程序,在浏览器里输入 http://localhost:9000/api/contacts?$Top=4&$OrderBy=Name ,看到浏览器之返回了按名字排序的top 4个contract

也可以通过Fidder去查询,具体可参照第7步。

9、WCF Web API也提供了一个WCF Web Test Client用于测试WCF Web API,通过配置启用,在RegisterRoutes方法里创建HttpConfiguration 实例,并设置EnableTestClient属性为True:

var config = new HttpConfiguration() { EnableTestClient = true };

然后把HttpConfiguration实例传递给HttpServiceHostFactory的配置属性

routes.Add(new ServiceRoute("api/contacts", new HttpServiceHostFactory() { Configuration = config }, typeof(ContactsApi)));

按下F5 启动调试项目,然后再浏览器后面加入/Test

总结

通过这个Quick start,我们学习到了以下内容

  • 如何使用NuGet向项目中添加Web Api引用
  • 如何创建一个通过HTTP GET访问的Web Api
  • 如何通过asp.net routes宿主一个Web Api
  • 如何通过浏览器或者Fiddler访问Web Api
  • 如何在Api上启用OData uri查询
  • 如何用WCF Web Test Client测试WCF Web API

你可以在这里获取到代码。

2011-10-4日更新到WebAPI 0.5 Preview

【WebApi】————.net WebApi开发(一)的更多相关文章

  1. 零基础ASP.NET Core WebAPI团队协作开发

    零基础ASP.NET Core WebAPI团队协作开发 相信大家对“前后端分离”和“微服务”这两个词应该是耳熟能详了.网上也有很多介绍这方面的文章,写的都很好.我这里提这个是因为接下来我要分享的内容 ...

  2. .net core webapi 前后端开发分离后的配置和部署

    背景:现在越来越多的企业都采用了在开发上前后端分离,前后端开发上的分离有很多种,那么今天,我来分享一下项目中得的前后端分离. B/S  Saas 项目:(这个项目可以理解成个人中心,当然不止这么点功能 ...

  3. C# WebApi过滤器(开发接口必备利器)

    在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理.引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想 ...

  4. webapi 使用Autofac 开发经历

    2018/4/6 号 早上五点..被手机震动吵醒. 之后直接打开电脑,打算再加强下我自己的webapi这套东西. 虽然三年的工作经验接触了N多框架和各种风格的开发方式,但是让我自己来搞一套实在不会搞, ...

  5. 案例:1 Ionic Framework+AngularJS+ASP.NET MVC WebApi Jsonp 移动开发

    落叶的庭院扫的一干二净之后,还要轻轻把树摇一下,抖落几片叶子,这才是Wabi Sabi的境界. 介绍:Ionic是移动框架,angularjs这就不用说了,ASP.Net MVC WebApi提供数据 ...

  6. 初始WebApi 利用WebApi实现基础的CRUD

    微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService.它是简单,代码 ...

  7. What are the differences between WebAPI and WebAPI 2

    http://stackoverflow.com/questions/21298961/what-are-the-differences-between-webapi-and-webapi-2 Maj ...

  8. WebApi:WebApi的Self Host模式

    不用IIS也能執行ASP.NET Web API 转载:http://blog.darkthread.net/post-2013-06-04-self-host-web-api.aspx 在某些情境, ...

  9. Restful WebApi项目开发实践

    前言 踩过了一段时间的坑,现总结一下,与大家分享,愿与大家一起讨论. Restful WebApi特点 WebApi相较于Asp.Net MVC/WebForm开发的特点就是前后端完全分离,后端使用W ...

  10. Restful WebApi开发实践

    随笔分类 - Restful WebApi开发实践   C#对WebApi数据操作 摘要: ## 目标简化并统一程序获取WebApi对应实体数据的过程,方便对实体进行扩充.原理就是数据服务使用反射发现 ...

随机推荐

  1. lintcode:接雨水

    接雨水 给出 n 个非负整数,代表一张X轴上每个区域宽度为 1 的海拔图, 计算这个海拔图最多能接住多少(面积)雨水. 如上图所示,海拔分别为 [0,1,0,2,1,0,1,3,2,1,2,1], 返 ...

  2. Haproxy均衡负载部署和配置文件详解

    HAproxy均衡负载部署和配置文件详解 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.根据官方数据,其最高极限支持10G ...

  3. Knight's Trip---hdu3766(马走日求最小走的步数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3766 给你一个x ,y 求出从(0,0)位置到达需要的最小步数每次只能走日型: 下图为暴力bfs得到的 ...

  4. chrome开发配置(四)生成项目及配置库引用

    1.运行gclient runhooks --force .会重新下载个python 2.7版本的,并且下载好几个文件,大概1个多小时:

  5. hive0.13网络接口安装

    安装好hive 0.13以后,在./lib下找不到hive-hwi-0.13.1.war   ,那该怎么办? 1.下载hive-0.12.0版本,把这一版里面的hive-hwi-0.12.0.war重 ...

  6. c# 计算1-100之间的所有质数(素数)的和

    求1-100之间的所有质数(素数)的和: 所以先必须知道什么是质数? 一个数是不是素数   “素数”是指除了能被1和自身整除外,不能被任何其它整数整除的自然数. 然后知道有哪些是质数: 记忆的方法: ...

  7. How to install cacti With Nginx

    转载于:https://github.com/blackyboy/Ubuntu-Linux-Stuffs/blob/master/How-to-install-Cacti-Monitoring-Ser ...

  8. iconv字符编码转换

    转自 http://blog.csdn.net/langresser_king/article/details/7459367 iconv(http://www.gnu.org/software/li ...

  9. 设置Sublime Text2 中代码提示

    打开sublime text的菜单 Preferences -> Package Settings -> GoSublime ->Settings – User  然后输入 { &q ...

  10. PopupWindwo和AlertDialog的区别

      AlertDialog 是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情:而PopupWindow是阻塞式对话框:PopupWindow弹出时, 程序会等 待,在PopupWind ...