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代碼,而是后台代碼。
- 結論:檢查配置的接口地址是否正確,或者接口服務器是否開啟。