如何用mvc作一個http模擬器

不少時候咱們系統須要連一些第三方的api,有時候咱們系統要根據api返回結果走不一樣的分支,這個時候若是須要測試覆蓋全部分支,那麼咱們一般有三種作法。web

1.純人工,讓第三方配合測試,覆蓋全部分支,正常都會走一遍,可是作多了,對方煩了,他認爲本身系統沒問題,沒義務配合你了。api

2.程序內部增長內部測試代碼,方法不訪問api,而是直接返回測試要的輸出值。這種方法缺點很明顯,一是不能模擬http請求,二是很差維護。還有測試代碼總不能提交到正式環境吧,即便是不會調用的代碼。服務器

3.本身搭建一個api服務器。只要修改程序訪問的api地址,就能夠測試了,方便,不破壞原程序。mvc

綜上,咱們選擇第三種方式。並使用.net的mvc來作這個模擬器。測試

既然要作http模擬器,那麼通常思路就是,咱們有n個請求地址,咱們就寫幾個action還響應,可是這樣咱們之後要擴展還得該模擬器,這可不行。那麼咱們就只用1個action來響應全部的請求吧。url

怎麼用1個action響應全部請求呢,首先我第一個想到的是捕獲404錯誤,而後重定向到action裏面處理。.net

而後我配置了web.config的customErrors,可是這樣的話重定向後,只能帶上原地址,其餘頁面請求參數都沒有,這個可不行。調試

若是不用配置,那我寫Application_Error和HandleErrorAttribute應該能夠捕獲了吧,結果發現仍是不行,調試時,404根本不進這兩個方法。路由

看來靠捕獲404,來重定向這個方案是行不通的。這個時候我想到了mvc不是能夠自定義路由嗎,我寫個全匹配的路由規則不就能夠了嗎?試了下果真能夠,代碼以下:io

 routes.MapRoute(
             name: "Default",
             url: "{*anything}",
             defaults: new { controller="Default",action="Index"}

剩下的工做無非是在action中寫「接受請求參數->判斷請求參數->根據請求讀取不一樣的結果文件->將結果輸出」的代碼,簡單易操做,就不詳解了。

相關文章
相關標籤/搜索