当前位置: 首页 > news >正文

WebAPI路由、参数绑定

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、测试Web API

a)测试Web API可以用来检测请求和返回数据是否正常,可以使用Fiddler、Postman等工具。以Fiddler为例,这是一个http协议调试代理工具,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据。

b)Fiddler会默认捕获所有进程的通信,可以在All Processes中Hide All然后在Composer-Parsed选项卡选择需要捕获的请求类型。在Inspectors标签可以查看捕获请求的信息内容。

 

二、Web API Controller

a)Web API Controller类似于MVC的Controller,命名也是以“Controller”结尾,但要继承自System.Web.Http.ApiController类,Controller内的方法为操作方法。

b)HTTP动词包括读取记录GET、插入新记录POST、修改记录PUT、修改部分记录PATCH、删除记录DELETE几种。操作方法的命名可以与HTTP动词名相同,也可以用HTTP动词开头。如果需要使用其它名称,则应在方法头部添加[HttpPost]之类的Attribute。

c)Web API总体的请求/响应管道为:

 

0?wx_fmt=png

 

 

d)Web API控制器与MVC控制器的区别

 

0?wx_fmt=png

 

三、配置Web API

a)Web API采用基于代码的配置方式,而不是Web.config文件。在WebApiConfig.cs可以配置Web API来定制Web API托管基础设施和组件的行为如路由、格式器,过滤器,DependencyResolver,messagehandlerParamterBindingRules、属性、服务等。

b)Application_Start方法调用GlobalConfiguration.Configure时,将WebApiConfig.Register作为回调方法传入,WebApiConfig.Register()方法包含一个类型为 HttpConfiguration的参数,该参数用于用于配置Web API。HttpConfiguration类包括以下属性,通过它可以覆盖默认的Web API的行为:

 

0?wx_fmt=png

 

 

四、Web API路由

WebAPI支持两种类型的路由,基于约定的路由和基于属性的路由。

a)   基于约定的路由

使用模板来确定某个请求由哪个控制器和操作方法执行,至少应有一个路由模板必须添加到路由表。WebApiConfig.cs类中,config.Routes是一个路由表或HttpRouteCollection类型的集合,MapHttpRoute扩展方法在内部创建一个新的IHttpRoute实例,并将其添加到HttpRouteCollection中,也可以创建一个新的路由并手动添加到集合

 

0?wx_fmt=png

 

 

还可以为HttpConfiguration配置多个路由,传入的请求会依次与这些路由匹配。

b)   基于属性的路由

WebAPI 2开始支持Attribute路由,首先要在WebApiConfig.cs类中设置config.MapHttpAttributeRoutes()已启用基于属性的路由,然后使用Route标签来配置。

 

0?wx_fmt=png

 

 

 

五、参数绑定

a)操作方法可以有一个或多个不同类型的参数。它可以是原始类型或复杂类型。原始类型是指int, bool, double, string, GUID, DateTime, decimal或任何其他可以从字符串类型转换的类型。Web API会根据URL的查询字符串或请求主体中参数类型来绑定操作方法的参数。默认情况下,如果参数类型为原始类型,则会从query string中获取,如果复杂类型,则从请求主体(Request Body)中获取。

b)参数可以有多个,且不区分大小写,对参数的先后顺序也没有要求,uri中可以有多余的参数,但不可以缺少参数。

c)复杂类型参数

例如将Student作为参数,然后用fiddler模拟请求

 

0?wx_fmt=png

0?wx_fmt=png

 

 

 

请求头要设置Content-Type:application/json,否则无法解析。另外,文章中说Get方法不能有复杂参数,但在fiddler中试了是可以的,API端也能正确响应。

d)FromURI与FromBody

默认从query string中获取原始类型,从Request Body中获取复杂类型,但通过FromURI与FromBody这两个用于参数的Attribute可以设置参数匹配规则,为简单类型添加FormBody特性后,Web API将从Request Body匹配id。

 

 

0?wx_fmt=png

 

 

学习资料:www.yuanjiaocheng.net (猿教程) 作者:卿文刚

转载于:https://my.oschina.net/u/2327858/blog/1506197

相关文章:

  • [Thinking]三个行
  • 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…【字符串+模拟】
  • MAC Gradle 下载的问题
  • ios下微信浏览器如何唤醒app?app已上架应用宝
  • C/C++中__builtin_popcount()的使用及原理
  • 交叉验证
  • python获取参数
  • APP开发的常见问题有哪些呢?
  • Ceph,TFS,FastDFS,MogileFS,MooseFS,GlusterFS 对比
  • Linux 防火墙firewalld
  • C语言之函数调用06—彩球排列
  • Rafy环境配置
  • 《人月神话》(P4)概念完整性和结构师
  • Failed to create the Java Virtual Machine
  • tcp中设置连接超时
  • DOM的那些事
  • ES6系统学习----从Apollo Client看解构赋值
  • extract-text-webpack-plugin用法
  • fetch 从初识到应用
  • JAVA多线程机制解析-volatilesynchronized
  • Linux中的硬链接与软链接
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • windows-nginx-https-本地配置
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 基于组件的设计工作流与界面抽象
  • 力扣(LeetCode)357
  • 聊一聊前端的监控
  • 试着探索高并发下的系统架构面貌
  • 微信小程序设置上一页数据
  • 最简单的无缝轮播
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • zabbix3.2监控linux磁盘IO
  • ​MySQL主从复制一致性检测
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转) Face-Resources
  • (转)一些感悟
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET delegate 委托 、 Event 事件
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .Net接口调试与案例
  • .NET命令行(CLI)常用命令
  • .NET项目中存在多个web.config文件时的加载顺序
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票