zoukankan      html  css  js  c++  java
  • 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 (猿教程) 作者:卿文刚

  • 相关阅读:
    shell入门-sed-2替换功能
    shell入门-sed-1
    shell入门-grep-3-egrep
    shell入门-grep2
    shell入门-grep过滤-1
    shell入门-连接符(并且、和、或者)
    shell入门-tr替换字符和split切割大文件
    shell入门-uniq去重复和tee重定向
    class类的相关操作 --| 公有普通方法 | 私有普通方法 | 无参方法 | 有参方法
    类的封装性-- | 成员属性 | 成员方法 | 私有属性 | 私有方法 之间调用
  • 原文地址:https://www.cnblogs.com/zhixin9001/p/7341890.html
Copyright © 2011-2022 走看看