WebAPI接口调试技巧

1.了解WebAPI接口

  • 接口模式:基于MVC4.0的WebAPI
  • 承载协议:HTTP
  • 跟踪工具:IE11
  • 请求方式:POST
  • 请求URL:IP:Port/Application/Controller/ActionName/Parameters
  • 请求参数:一串由JSON对象转化而成的字符串
  • 响应状态:200(OK)
  • 响应结果: 一串JSON格式的数据
  • 响应类型:application/json

2.WebAPI接口的URL规则

  • URL规则:IP:Port/Application/Controller/ActionName/Parameters
  • 示例:192.168.202.53/wszwdtapi_v6.6/taskkind/gettaskkindsbycodename
    IP:192.168.202.53,Port:80(默认)
    ApplicationName:wszwdtapi_v6.6
    Controller:taskkind
    ActionName:gettaskkindsbycodename
    Parameters:无

3.HTTP请求模式

  • 两种最常用见的HTTP 请求方法:
    GET 和 POST
  • 标准版的利用方案:
    统一使用POST方式,为接口后台提供统一的参数处理规则。
  • 接口限制:接口会限制HTTP请求模式,如果限制了POST方式,则GET时会报404错误。
GET POST
从指定的资源请求数据 向指定的资源提交要被处理的数据
参数必须以键值对的形式包含在URL中 建议参数以JSON字符串存放在请求体中
请求体为空 利用请求体传数据

4.HTTP状态消息

  • 常见的状态
常见状态 注释
200 OK 请求成功
304 Not Modified 未按预期修改文档。
403 Forbidden 对被请求页面的访问被禁止。
404 Not Found 服务器无法找到被请求的页面。
500 Internal Server Error 请求未完成。服务器遇到不可预知的情况。
501 Not Implemented 请求未完成。服务器不支持所请求的功能。
503 Service Unavailable 请求未完成。服务器临时过载或当机。

更多状态请点击这里

5.常见的HTTP协议跟踪工具

6.科学的剖析接口调用情况

  • 当访问接口不成功,且初步排查没发现问题时,就应该先从HTTP请求入手,而不是耗费太多时间纠结在代码上。
  1. 打开调试工具,重复请求过程(刷新页面或重新点击提交按钮)
  2. 通过调试工具,查看是否存在对应的请求
  3. 如果不存在请求,现判断调用代码是否出现异常,有没有发出请求?
  4. 请求存在,判断请求状态码,顺藤摸瓜的分析原因。
    例如最常见错误,假如HTTP状态码为404,就可以通过判断IP、端口号,请求方式、URL字符串来确定是否是代码问题还是部署问题。
  5. 请求后得到状态码为200,那么再仔细研究下接口的传入数据和传出数据。

7.使用Fiddler工具分析传入数据与返回数据

使用Fiddler工具

  1. 打开Fiddler
  2. 利用浏览器访问对应的页面
  3. 在Fiddler左侧请求列表中,找对刚才的页面
  4. 点击选中,在Fiddler右侧查看详细数据。请求正文

响应正文

这里写图片描述

利用Fiddler右侧Composer模拟请求

  1. 选择请求方式Get或者Post
  2. 输入URL
  3. 如果有参数,在Request Body中输入
  4. 点击Excute,发送请求
  5. 在右侧Log Requests中选择刚执行的请求
    Composer模拟请求

8.常见问题的解决

跨域问题

  • 当我们跟踪到带有关键字“Access-Control-Allow-Origin ”的错误时,说明我们遇到了跨域问题!如图:
    错误示例
    跨域问题的根本来自于浏览器的一个安全策略:同源策略
    所谓“同源”指的是“三个相同”:协议相同、域名相同、端口相同(IE浏览器下只需要满足协议及域名相同)
    如果非同源,共有三种行为受到限制。
  1. Cookie、LocalStorage 和 IndexDB 无法读取。
  2. DOM 无法获得。
  3. AJAX 请求不能发送。
  • 目前有三种方法规避这个限制。1.JSONP,2.WebSocket,3.CORS
    标准版统一采用CORS方式来规避同源策略。
  1. .Net中,在需要访问的接口的返回头中,加入“源信息”
    代码如下:HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");
    或者在WebConfig中,为每个返回头加入“源信息”
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" /></customHeaders>

常见的403错误

  • .Net模式的WebAPI的403错误,是一个典型的Web应用程序问题。
  • 现象:IP、端口完全正常,同台服务器部署的其他Web程序能正常访问,本接口在其他服务器上也能正常开放!根据状态码提示:该接口的应用程序本身存在问题。
    错误详情
  • 一般经验:.Net的WebAPI接口,是基于.Net的MVC框架,老版本IIS未必支持MVC机制,导致HTTP请求无法成功识别。一般情况将程序进程配置为集成模式即可。也有可能是因为未将.Net Framework4.0注册进IIS导致,通过命令注册即可。
  • 具体参考:http://blog.csdn.net/lingxyd_0/article/details/43154867
  • Unable To connect the Romote Server(无法连接到远程服务器)
  • 问题:Unable To connect the Romote Server(无法连接到远程服务器)
  • 分析:这两个问题,仍是接口不能访问导致的。问题表现形式较以往很大不同,是因为访问接口的不是JS代码,而是后台代码。
  • 结论:检查配置的接口地址是否正确,或者接口服务器是否开启。
原文地址:https://www.cnblogs.com/ziqinchao/p/13329555.html