WebApi 实例
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 实例的更多相关文章
- Swagger+Asp.net WebApi实例
第一步新建WebApi项目 文件-新建-项目,弹出以下页面 第二步,新建参数项目 第三步 1.自定义输入参数 2.定义公用输出参数 3.定义输出参数 4.定义返回模型 第四步,在webapi项目中新增 ...
- WebAPI实例--第一个API
今天终于做了第一个任务,学习API之后的第一个实例.销售设置开发API. 第一.层次结构 1.API各层 项目结构主要有五层,分别为API.BizModel.Data.DBModel.Logic. 2 ...
- WebAPI实例
@{ ViewBag.Title = "About"; } @*<script src="~/Scripts/jquery-1.7.1.min.js"&g ...
- BPM 应用系统开发案例实战
概述 IBM BPM 的前身是 Lombardi,是由 IBM 于 2009 年收购的产品,之后产品更名为 IBM WebSphere Lombardi Edition,目前最新版本称为 IBM BP ...
- 【http】http/1.1 八种请求方式
OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法.也可以利用向Web服务器发送'*'的请求来测试服务器的功能性. HEAD 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回 ...
- 我的第一个webapiDemo
最近在面试,总是被问到有没有接触过webapi 或者问webapi和MVC 的区别,今天看了看,原来如此,自己理解感觉webapi和webservice一样像是实现soa 的一种形式,也可以理解为服务 ...
- ASP.NET Core on K8S学习初探(3)部署API到K8S
在上一篇<基本概念快速一览>中,我们把基本的一些概念快速地简单地不求甚解地过了一下,本篇开始我们会将ASP.NET Core WebAPI部署到K8S,从而结束初探的旅程. Section ...
- 1、微服务--为什么有consul,consul注册,心跳检测,服务发现
一.为什么有consul? 在微服务,每1个服务都是集群式的,订单服务在10台服务器上都有,那么用户的请求到达,获取哪台服务器的订单服务呢?如果10台中的有的订单服务挂了怎么办?10台服务器扛不住了, ...
- 最近学习工作流 推荐一个activiti 的教程文档
全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...
随机推荐
- oracle sql 语句 示例
--oracle 用户对象的导入导出 exp devimage/oracle@172.xx.x.xx/TESTDB owner='devimage' file=d:/devimage.dmp log= ...
- Ajax效果--个人收藏
$.ajax({ url: "../../../Tools/WeChatMenu.ashx?action=get_menu", type: "post", da ...
- USACO-Greedy Gift Givers(贪婪的送礼者)-Section1.2<2>
[英文原题] Greedy Gift Givers A group of NP (2 ≤ NP ≤ 10) uniquely named friends has decided to exchange ...
- 【总结整理】关于IE6的兼容性
1. /*IE6兼容性,input边框border:none无效,不能去掉,只能把背景颜色去掉*/ background: none; /*background-color:#fff ;*/ 2. / ...
- TortoiseSVN 日常操作指南
TortoiseSVN A Subversion client for Windows Stefan Küng Lübbe Onken Simon Large 2005/01/17 19:09:21 ...
- netty的引用计数
netty的引用计数文档看http://netty.io/wiki/reference-counted-objects.html 为什么会引用引用计数呢,Java中不是有gc线程帮我们回收对象吗?我个 ...
- 微信小程序自学第二课:app及页面的生命周期、使用setData绑定数据
一.App声明周期 1.App() app.js中的App() 函数用来注册一个小程序.接受一个 object 参数,其指定小程序的生命周期函数等. 示例代码: App({ onLaunch: fun ...
- api接口访问限制
1.场景描述 在日常开发接口的时候,尤其是restfull接口,肯定会考虑安全或者是做一些自定义的限制,用来界定并维护代码.那么,我们都会采用什么方法那?通常来讲,我们可以通过session的形式,以 ...
- 消息队列--RabbitMQ(二)
1.常用的几种队列简介 RabbitMQ有五种常用的队列,分别是:简单队列.work模式.发布订阅模式.路由模式.主题(Topic)模式.其实发布订阅.路由.主题这三种模式都从属于与routingke ...
- html5表单及新增的改良元素
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...