REST是设计风格而不是标准。

webapi有自己的路由。

webservice和wcf的协议都是soap协议,数据的序列化和反序列化都是soap的格式。而webapi是Json的数据传递

webapi的优点有哪些?

(1)非常适合做http的请求,前端与webapi交互特别方便

(2)webapi更轻量因为使用的json数据来传递。

(3)webapi很多时候是给前端提供数据的,因为webapi跟控制器关联的没那么紧密(若是没webapi,用mvc的模式,那么页面直接从对应的控制器获取数据),这样传递数据webapi对,手机,app,页面都可以通过同一个数据源提供数据,会比较灵活一些。(会跨域)

(一)配置webapi,访问

第一步:新建项目后,找到Global.asax文件----找到GlobalConfiguration.Configure(WebApiConfig.Register)方法------按F12进入 WebApiConfig.Register方法中----添加内容红框框

知识点:路由器注册顺序是由上往下的,会先从上面进行匹配。

路由器的名称不能重名,否则报错【CustomApi/DefaultApi】

第二步:设置webapi项目为启动项,然后启动,在网页路径上加api/values(控制器名称不要Controller)

知识点:因为ValuesController是项目自带的,那么这一次的请求与 DefaultApi的路由规格是一致的。

但显示的结果应该Values控制器中的get方法的,也就是应该是访问api/values/get。实际上api风格是不需要的get,rest也不需要get,会自动找到这个get的。若是把这个路径放到别的浏览器会直接得到json格式的数据

(2)如何去使用webapi?页面获取数据通过api提供,不通过控制器

知识点:1.ajax中的type有四种方式:get(查询),post(修改),delete(删除),put(插入) 。

2.写webapi时,在后台的方法最好将特性标记号对应上[HttpGet],[HttpPost],[HttpDelete],[HttpPut]。http请求和rest风格的api如果不想在后台方法写特性,但也可以将方法名以Get开头,否则会报错。

get:若是查询数据,通过get,其实get请求会将参数拼装到url上面,而url长度是有限的

post:若是对原有数据新增和修改就用post,多用post即可。post不是将参数放在url上面的,而是放在表单上的。

3.传递的参数username名一定要相同,但是大小写可以不一样。

4.若是user={name:"张苏纳",id:123,age:'19'} 然后data:user那么在后台是接收不到的,即使在页面调试时是可以看到数据。若是想接收到的话,需要在后台写成GetUserModeuri([FormUri]Users user)。

5.基于第4的另一种方法。可以将user序列化转化为一个字符窜,然后后台接收后反序列化即可得到。data:{userString:JSON.stringify(user)}

6.(1)若是通过post请求的时候,是将数据放在from data里面的,若是传递单个参数,不要在ajax上不要写对应参数。

(2)只有不写id才能得到,与[formbody]无关。若是通过post传递实体,那么在后台可以直接拿到 ,不需要任何转化。

(3)当然也可以通过data:Json.stringify(user)      contentType:'application/json'(contentType默认是json类型的)来在后台同样得到。

(4)若是参数包含了一个实体,还有一个字符串参数data:{"User":user,"Info":info}该怎么办,可以通过引用Newtonsoft.Json.Linq的JObject类型。jObject.ToObject是一个序列化方法,将josn转化为对象。

7.dynamic动态类型,比如一个实体和一个参数放到同一个对象中,获取对象后,然后dynamic json=jData; var mm= json.user,动态类型是可以直接访问属性的。

8.put和post是一样的使用,put主要是插入数据使用。

9.delete也是一样的。

10.webapi最方便的是给前端使用。

get方式:单个参数,实体

post方式:第一种:单个参数

第二种:通过传实体或实体+参数

******************************以上都是前端的调用****************************************************

*******************************以下是后端的调用*****************************************************

1、后端调用也是通过模拟http请求,有两种方式:HttpClient(4.0才出现),HttpWebRequest(更灵活)

//得到调用该方法就可以得到  HttpClient方式实现get请求
private string GetClient(){string url="http://localhost:9008/api/users/GetUserByName?username=superman";
var handler=new HttpClientHandler();
using(var http=new HttpClient(handler)){
var response=http.GetAsync(url).Result;//拿到异步结果
cw(response.StatusCode);//确保http成功状态值
//await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression=DecompressionMethods.G)
return response.Content.ReadAsStringAsync().Result; }
} //得到调用该方法就可以得到 HttpWebRequest方式 实现get请求
private string GetWebQuest(){
string url="http://localhost:9008/api/users/GetUserByName?username=superman";
HttpWebRequest request
using(var http=new HttpClient(handler)){
var response=http.GetAsync(url).Result;//拿到异步结果
cw(response.StatusCode);//确保http成功状态值
//await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上 面的AutomaticDecompression=DecompressionMethods.G)
return response.Content.ReadAsStringAsync().Result; }
}

WebApi 实例的更多相关文章

  1. Swagger+Asp.net WebApi实例

    第一步新建WebApi项目 文件-新建-项目,弹出以下页面 第二步,新建参数项目 第三步 1.自定义输入参数 2.定义公用输出参数 3.定义输出参数 4.定义返回模型 第四步,在webapi项目中新增 ...

  2. WebAPI实例--第一个API

    今天终于做了第一个任务,学习API之后的第一个实例.销售设置开发API. 第一.层次结构 1.API各层 项目结构主要有五层,分别为API.BizModel.Data.DBModel.Logic. 2 ...

  3. WebAPI实例

    @{ ViewBag.Title = "About"; } @*<script src="~/Scripts/jquery-1.7.1.min.js"&g ...

  4. BPM 应用系统开发案例实战

    概述 IBM BPM 的前身是 Lombardi,是由 IBM 于 2009 年收购的产品,之后产品更名为 IBM WebSphere Lombardi Edition,目前最新版本称为 IBM BP ...

  5. 【http】http/1.1 八种请求方式

    OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法.也可以利用向Web服务器发送'*'的请求来测试服务器的功能性. HEAD 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回 ...

  6. 我的第一个webapiDemo

    最近在面试,总是被问到有没有接触过webapi 或者问webapi和MVC 的区别,今天看了看,原来如此,自己理解感觉webapi和webservice一样像是实现soa 的一种形式,也可以理解为服务 ...

  7. ASP.NET Core on K8S学习初探(3)部署API到K8S

    在上一篇<基本概念快速一览>中,我们把基本的一些概念快速地简单地不求甚解地过了一下,本篇开始我们会将ASP.NET Core WebAPI部署到K8S,从而结束初探的旅程. Section ...

  8. 1、微服务--为什么有consul,consul注册,心跳检测,服务发现

    一.为什么有consul? 在微服务,每1个服务都是集群式的,订单服务在10台服务器上都有,那么用户的请求到达,获取哪台服务器的订单服务呢?如果10台中的有的订单服务挂了怎么办?10台服务器扛不住了, ...

  9. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

随机推荐

  1. 想要table表格垂直滚动,加点CSS即可

    <style> /*设置 tbody高度大于400px时 出现滚动条*/ table tbody { display: block; height: 400px; overflow-y: ...

  2. 快速实现CentOS7安装python-pip

    1.首先检查linux有没有安装python-pip包,终端执行 pip -V [root@ network-scripts]# pip -V -bash: pip: command not foun ...

  3. /*去hover动画效果*/

    <!DOCTYPE html> /*去hover动画效果*/ <html lang="en"> <head> <meta charset= ...

  4. PullToRefresh------ListView的使用

    第一步 :写出布局文件的设置 <com.handmark.pulltorefresh.library.PullToRefreshListView android:id="@+id/pu ...

  5. WPF的TextBox产生内存泄露的情况

    前段时间参与了一个WPF编写的项目,在该项目中有这样一个场景:在程序运行过程中需要动态地产生大量文本信息,并追加WPF界面上的一个TextBox的Text中进行显示.编写完之后,运行该项目的程序,发现 ...

  6. Cocos creator之javascript闭包

    .什么是闭包? 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. 作为一个函数变量的一个引用,当函数返回 ...

  7. 在Android中使用FlatBuffers(下篇)

    本文来自网易云社区. FlatBuffers编码数组 编码数组的过程如下: 先执行 startVector(),这个方法会记录数组的长度,处理元素的对齐,准备足够的空间,并设置nested,用于指示记 ...

  8. 洛谷P1072 Hankson 的趣味题

    P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...

  9. bzoj2597: [Wc2007]剪刀石头布(费用流)

    传送门 不得不说这思路真是太妙了 考虑能构成三元组很难,那我们考虑不能构成三元组的情况是怎么样 就是说一个三元组$(a,b,c)$,其中$a$赢两场,$b$赢一场,$c$没有赢 所以如果第$i$个人赢 ...

  10. [JLOI2012]树 倍增优化

    题目描述 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深度为1.路径不 ...