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协议跟踪工具
- IE/Chrome/FireFox等浏览器开发人员工具-网络工具
(注:IE推荐使用10+,Chrome调试界面为英文) - Fildder(http://www.telerik.com/fiddler)
- PostMan(Chrome插件) (https://www.getpostman.com/)
6.科学的剖析接口调用情况
- 当访问接口不成功,且初步排查没发现问题时,就应该先从HTTP请求入手,而不是耗费太多时间纠结在代码上。
- 打开调试工具,重复请求过程(刷新页面或重新点击提交按钮)
- 通过调试工具,查看是否存在对应的请求
- 如果不存在请求,现判断调用代码是否出现异常,有没有发出请求?
- 请求存在,判断请求状态码,顺藤摸瓜的分析原因。
例如最常见错误,假如HTTP状态码为404,就可以通过判断IP、端口号,请求方式、URL字符串来确定是否是代码问题还是部署问题。 - 请求后得到状态码为200,那么再仔细研究下接口的传入数据和传出数据。
7.使用Fiddler工具分析传入数据与返回数据
使用Fiddler工具
- 打开Fiddler
- 利用浏览器访问对应的页面
- 在Fiddler左侧请求列表中,找对刚才的页面
- 点击选中,在Fiddler右侧查看详细数据。
利用Fiddler右侧Composer模拟请求
- 选择请求方式Get或者Post
- 输入URL
- 如果有参数,在Request Body中输入
- 点击Excute,发送请求
- 在右侧Log Requests中选择刚执行的请求
8.常见问题的解决
跨域问题
- 当我们跟踪到带有关键字“Access-Control-Allow-Origin ”的错误时,说明我们遇到了跨域问题!如图:
跨域问题的根本来自于浏览器的一个安全策略:同源策略
所谓“同源”指的是“三个相同”:协议相同、域名相同、端口相同(IE浏览器下只需要满足协议及域名相同)
如果非同源,共有三种行为受到限制。
- Cookie、LocalStorage 和 IndexDB 无法读取。
- DOM 无法获得。
- AJAX 请求不能发送。
- 目前有三种方法规避这个限制。1.JSONP,2.WebSocket,3.CORS
标准版统一采用CORS方式来规避同源策略。
- .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代码,而是后台代码。
- 结论:检查配置的接口地址是否正确,或者接口服务器是否开启。