WebAPI路由参数绑定

Posted zhixin9001

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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路由参数绑定的主要内容,如果未能解决你的问题,请参考以下文章

WebAPI 2参数绑定方法

ASP.Net Web API 的参数绑定[翻译]

HTTP post请求中的多个参数不在Asp.net webApi 2.0中绑定

细说 Web API参数绑定和模型绑定

模型绑定来自 Razor 页面发布表单上的路由参数

路由模型为租户前缀Route::resource()绑定多个参数