WebAPI路由、参数绑定
一、测试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总体的请求/响应管道为:
d)Web API控制器与MVC控制器的区别
三、配置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的行为:
四、Web API路由
WebAPI支持两种类型的路由,基于约定的路由和基于属性的路由。
a) 基于约定的路由
使用模板来确定某个请求由哪个控制器和操作方法执行,至少应有一个路由模板必须添加到路由表。WebApiConfig.cs类中,config.Routes是一个路由表或HttpRouteCollection类型的集合,MapHttpRoute扩展方法在内部创建一个新的IHttpRoute实例,并将其添加到HttpRouteCollection中,也可以创建一个新的路由并手动添加到集合
还可以为HttpConfiguration配置多个路由,传入的请求会依次与这些路由匹配。
b) 基于属性的路由
WebAPI 2开始支持Attribute路由,首先要在WebApiConfig.cs类中设置config.MapHttpAttributeRoutes()已启用基于属性的路由,然后使用Route标签来配置。
五、参数绑定
a)操作方法可以有一个或多个不同类型的参数。它可以是原始类型或复杂类型。原始类型是指int, bool, double, string, GUID, DateTime, decimal或任何其他可以从字符串类型转换的类型。Web API会根据URL的查询字符串或请求主体中参数类型来绑定操作方法的参数。默认情况下,如果参数类型为原始类型,则会从query string中获取,如果复杂类型,则从请求主体(Request Body)中获取。
b)参数可以有多个,且不区分大小写,对参数的先后顺序也没有要求,uri中可以有多余的参数,但不可以缺少参数。
c)复杂类型参数
例如将Student作为参数,然后用fiddler模拟请求
请求头要设置Content-Type:application/json,否则无法解析。另外,文章中说Get方法不能有复杂参数,但在fiddler中试了是可以的,API端也能正确响应。
d)FromURI与FromBody
默认从query string中获取原始类型,从Request Body中获取复杂类型,但通过FromURI与FromBody这两个用于参数的Attribute可以设置参数匹配规则,为简单类型添加FormBody特性后,Web API将从Request Body匹配id。
学习资料:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
WebAPI路由、参数绑定的更多相关文章
- ASP.NET WebAPI 05 参数绑定
ParameterBindingAttribute 在上一篇中重点讲了ModelBinderAttribute的使用场景.这一篇详细的讲一下ModelBinder背后的参数绑定原理. ModelBin ...
- WebAPI 2参数绑定方法
简单类型参数 Example 1: Sending a simple parameter in the Url [RoutePrefix("api/values")] public ...
- WebApi 参数绑定方法
WebAPI 2参数绑定方法 简单类型参数 Example 1: Sending a simple parameter in the Url 01 02 03 04 05 06 07 08 09 ...
- [译]WebAPI下的如何实现参数绑定
本文将概述在WebAPI方式下将如何将参数绑定到一个action方法,包括参数是如何被读取,一系列规则决定特定环境采用的那种绑定方式,文章最后将给出一些实际的例子. Parameter binding ...
- 使用ASP.Net WebAPI构建REST服务(四)——参数绑定
默认绑定方式 WebAPI把参数分成了简单类型和复杂类型: 简单类型主要包括CLR的primitive types,(int.double.bool等),系统内置的几个strcut类型(TimeSpa ...
- webapi简介及参数绑定
介绍:WebAPI用来开发系统间接口的技术,基于HTTP协议,返回默认是json格式.比wcf简单 更通用,更轻量级,更省流量(json格式):WebAPI尽可能复用MVC路由.ModelBinder ...
- WebAPI下的如何实现参数绑定
本文将概述在WebAPI方式下将如何将参数绑定到一个action方法,包括参数是如何被读取,一系列规则决定特定环境采用的那种绑定方式,文章最后将给出一些实际的例子. Parameter binding ...
- Laravel之路由 Route::get/post/any、路由参数、过滤器、命名、子域名、前缀、与模型绑定、抛出 404 错误、控制器
基本路由 应用中的大多数路都会定义在 app/routes.php 文件中.最简单的Laravel路由由URI和闭包回调函数组成. 基本 GET 路由 代码如下: Route::get('/', fu ...
- asp.net webapi 参数绑定总结
首先必须得更正下自己一直以来对于get请求和post请求理解的一个误区:get请求只能通过url传参,post请求只能通过body传参. 其实上面的理解是错误的,翻阅了不少资料及具体实践,正确理解应该 ...
随机推荐
- vscode中iview的</Col>标签报错问题
直接看问题截图: 这是vetur中eslint的问题,在vscode菜单中,文件->首选项->设置 找到 “vetur.validation.template”: true 将其改为fal ...
- 从svn下载项目,并在tomcat启动
1.需要先在本地安装mysql,并且启动成功(配置环境变量.客户端等). 2.需要下载小乌龟,需要从svn上下载项目. 3.安装eclipse,并且在eclipse上下载项目,会下载成两个聚合项目,不 ...
- [源码]Delphi源码免杀之函数动态调用 实现免杀的下载者
[免杀]Delphi源码免杀之函数动态调用 实现免杀的下载者 2013-12-30 23:44:21 来源:K8拉登哥哥's Blog 自己编译这份代码看看 过N多杀软 没什么技 ...
- python zip压缩文件 并移动到指定目录
需要引入的3个包: import os import shutil import zipfile 1. # 创建zip文件对象your_zip_file_obj = zipfile.ZipFile(' ...
- UFLDL 教程学习笔记(四)主成分分析
UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大学的 Andrew Ng 教授及其团队编写的一套 ...
- Linux学习笔记之九————ubuntu软件安装与卸载
一.更新 源 1. 寻找国内镜像源 所谓的镜像源:可以理解为提供下载软件的地方,比如Android手机上可以下载软件的91手机助手:iOS手机上可以下载软件的AppStore 2. 备份Ubuntu默 ...
- Ajax经典交互讲解
资料: XMLHttpRequest 对象 XMLHttpRequest 对象提供了对 HTTP 协议的完全的访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力.XMLHttp ...
- Vue + Element UI 实现权限管理系统 前端篇(十一):第三方图标库
使用第三方图标库 用过Elment的同鞋都知道,Element UI提供的字体图符少之又少,实在是不够用啊,幸好现在有不少丰富的第三方图标库可用,引入也不会很麻烦. Font Awesome Font ...
- Feign禁用Hystrix
1.完全禁用Hystrix配置yml文件feign.hystrix.enabled=false 2.部分禁用Hystrix2.1.FeignNoHystrixConfigure.java——编写Fei ...
- Docker上运行MySQL服务
1.搜索MySQL镜像 $ docker search mysql INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.i ...