1、在.NET中,測試API會是我們比較頭疼的一個問題,因為在測試的過程中會遇到各種粘貼複制,有時候還會把傳值的參數給弄錯了,有時候請求也會遇到問題,比如會出現請求的URL位址出現錯誤,但是錯誤了之後有時候某些值不需要變,但是請求錯了也許會把以前的值一起請求,接下來給大家介紹一種本人寫的測試接口API的方法:個人覺得比較好用,本文用的技術是asp.net mvc。
//首先引用jQuery檔案
<script src="~/Content/js/jquery-1.9.1.min.js"></script>
//對應的html檔案
<div>
<label>請輸入XML位址</label>
<textarea rows="5" cols="15" style="width: 300px; height: 200px;" οnkeyup="BindKeyUp(this.value)"></textarea>
<p>
<label>根據搜尋記錄查詢:</label>
<input type="text" id="blend" οnkeyup="MothedSel(this.value)" placeholder="請輸入要搜尋的方法" />
<label class="ts"></label>
</p>
<div class="allValue">
<div id="Title"></div>
<p>
<label>URL位址:</label>
<input type="text" id="Geturl" placeholder="請輸入請求位址" />
</p>
@*存放鍵值對标簽*@
<div id="AddDiv">
</div>
@*存放傳回值标簽*@
<div id="RetDiv">
</div>
</div>
<div class="dj">
<p>
<input type="button" value="送出" id="btn" />
<input type="button" value="清除所有緩存" id="save" />
</p>
</div>
</div>
-------JS代碼塊部分---------
<script>
$(function () {
//送出按鈕點選事件
$("#btn").click(function () {
//alert($("#Geturl").val())
//存儲參數值
var name = "";
if ($("#Geturl").val().trim() == null)
return;
$.each($("#AddDiv p"), function (i, item) {
if (i == $("#AddDiv p").length - 1) {
name += $(item).children("input.keys").val().trim() + "|" + $(item).children("input.Kval").val().trim();
} else
name += $(item).children("input.keys").val().trim() + "|" + $(item).children("input.Kval").val().trim() + ",";
})
//請求URL
$.post("/Home/GetApi", { data: name, url: $("#Geturl").val().trim() }, function (data) {
$("#RetDiv").html(data);
})
//存儲URL位址最後一個斜杠的值
var Fmothed = $("#Geturl").val().substring($("#Geturl").val().lastIndexOf("/") + 1, $("#Geturl").val().length);
//給URL指派
$("#Geturl").attr("value", $("#Geturl").val().trim());
$.each($("#AddDiv p"), function (i, item) {
$(item).children("input.keys").attr("value", $(item).children("input.keys").val().trim());
$(item).children("input.Kval").attr("value", $(item).children("input.Kval").val().trim());
})
localStorage[Fmothed] = $(".allValue").html();
})
//根據指定URL儲存指定字段
$("#save").click(function () {
localStorage.clear();
})
})
//模糊查詢比對
function MothedSel(value) {
if (localStorage.getItem(value) != null && localStorage.getItem(value) != 'undefined') {
$(".allValue").html(localStorage.getItem(value));
$(".ts").text("");
}
else {
$(".ts").text("未找到比對項!");
}
}
//比對xml檔案
function BindKeyUp(txt) {
//進入方法清空盒子,避免疊加
$("#AddDiv").html("");
$("#Title").html("");
//1.去掉所有的換行符 , 三個斜杠 , 空格 ,
var reg = /\n|\r|\ |[/]/g;
var name = txt.replace(reg, "");
//把xml資料分隔成對 (即一對開始和結束标簽為一條)
reg = /<(\S*?)>(\S*?)<(\S*?)>/g;
var AllStrip = name.match(reg);
//獲得參數鍵 key
reg = /\"(.*?)\"/g;
//擷取參數值
var regValue = /<\S*>(\S*?)<\S*>/;
//儲存鍵
var strfors = "";
//儲存值
var StrValue = "";
//存儲summary的值
var Valsummary = "";
//存儲returns的值
var rets = "";
//正則判斷summary是否為空
var zzSumReg = new RegExp(/<summary>\S*(?=<summary>)/g);
//正則判斷returns是否為空
var zzRetsReg = new RegExp(/<returns>\S*(?=<returns>)/g);
//周遊每條xml資料
for (var i = 0; i < AllStrip.length; i++) {
//因為我隻需要參數的鍵和值,是以此處啟用過濾 , 把唯一的頭尾過濾儲存到值裡面
if (zzSumReg.test(AllStrip[i])) {
Valsummary = AllStrip[i].match(regValue)[1];
continue;
}
if (zzRetsReg.test(AllStrip[i])) {
rets = AllStrip[i].match(regValue)[1];
continue;
}
strfors = strfors + AllStrip[i].match(reg) + ","
StrValue = StrValue + AllStrip[i].match(regValue)[1] + ","
}
//分隔之後的鍵
var j = strfors.replace(/\"/g, "").substring(0, strfors.replace(/\"/g, "").length - 1).split(',');
//分隔之後的值
var v = StrValue.replace(/\"/g, "").substring(0, StrValue.replace(/\"/g, "").length - 1).split(',');
$("#Title").append('<p>' + Valsummary + '</p>');
//根據存儲的鍵和值來自動生成标簽
for (var i = 0; i < j.length; i++) {
//存儲要追加的p标簽
var pDiv = '<p><label>key:</label><input class="keys" autofocus="autofocus" required="required" type="text" value="' + j[i] + '" placeholder="' + j[i] + '" class="txt" /><label>value:</label><input class="Kval" required="required" autofocus="autofocus" type="text" placeholder="' + v[i] + '" class="txt" /><label style="color:red;">' + v[i] + '</label></p>';
$("#AddDiv").append(pDiv);
}
}
</script>
大家隻需要把上面的部分代碼複制到頁面中運作即可調用,運作效果如下:
背景對應ajax請求的代碼:
public ActionResult GetApi(string data, string url)
{
//擷取鍵值對資料
string[] AllParams = data.Split(',');
using (var client = new HttpClient())
{
var values = new List<KeyValuePair<string, string>>();
for (int i = 0; i < AllParams.Length; i++)
{
//分隔擷取鍵值對資料
string[] ParamKeysValues = AllParams[i].Split('|');
values.Add(new KeyValuePair<string, string>(ParamKeysValues[0], ParamKeysValues[1]));
}
var content = new FormUrlEncodedContent(values);
var response = client.PostAsync(url, content);
var responseString = response.Result.Content.ReadAsStringAsync();
return Content(responseString.Result);
}
}
2、相信大家看過這個之後一定會有個疑問,如果我通過這種方式固然是好,但是還有個難題,就是在方法上是實體參數的話,我去一個一個寫具體的參數就會非常麻煩,是以本人對此又重新寫了一個方法,下面直接貼出代碼。
<div>
<div id="TransCls">
<label>請輸入需要轉換的類:</label>
<textarea rows="5" cols="15" style="width: 300px; height: 200px;" οnkeyup="TransFromClass(this.value)"></textarea>
</div>
<div id="TransXml">
<label>轉換後的XML:</label>
<textarea rows="5" cols="15" style="width: 300px; height: 200px;" id="GetVal"></textarea>
</div>
</div>
//類轉換xml
function TransFromClass(txt)
{
var reg = /\n|\r|\ |[/]/g;
var name = txt.replace(reg, "");
var zzSumReg = /<summary>\S*?(?=\})/g;
var sumReg = /<summary>(\S*?)(?=<summary>)/;
var RegName = /public(string|int|DateTime|object)*(\S*?)(?={)/;
//獲得數組
var AllName = name.match(zzSumReg);
//存注釋資訊
var zsXml = "";
for (var i = 0; i < AllName.length; i++) {
//console.info(AllName[i].match(RegName)[2]);
zsXml += '<param name="' + AllName[i].match(RegName)[2] + '">' + AllName[i].match(sumReg)[1] + '</param>';
}
$("#GetVal").val(zsXml);
}
大家複制到頁面中之後,運作之後的操作如下:
大家把代碼複制到自己的項目中,運作之後按照上圖的操作來即可,非常的友善。。。
不足之處還請大家多多請教,大家共同進步,争取把項目做得更完善,讓更多人受益。