引言 Postman 是一個用來測試Web API的Chrome 外掛軟體,可由google store 免費取得並安裝於Chrome里,對於有在開發Web API的開發者相當有用,省掉不少寫測試頁面呼叫的工作,通常我們看到的使用情境多數是直接呼叫Web API而未隨著Request發送相關所需參數 ...
引言
Postman 是一個用來測試Web API的Chrome 外掛軟體,可由google store 免費取得並安裝於Chrome里,對於有在開發Web API的開發者相當有用,省掉不少寫測試頁面呼叫的工作,通常我們看到的使用情境多數是直接呼叫Web API而未隨著Request發送相關所需參數,本篇就來說明如果我們想要在呼叫Web API時一併夾帶JSON數據時,該如何使用Postman?
需求
採用POST的請求方式,並且須夾帶JSON數據給Web API使用教程
第一、設置URL
第二、設置header中的Content-Type
第三、設置Body
第四、輸入json格式的測試數據
小結
在我們做前後端分離的項目的時候,這個工具測試後臺介面還是非常便利的,這博客希望幫助到大家。
WebAPI GET和POST請求的幾種方式
GET請求
1.無參數get請求
一般get請求有兩種寫法,一種是$.get() 一種是$.ajax({type:"get"}),我個人比較喜歡用後者。
下麵例子主要是get無參數請求,獲取人員列表並將數據返回到前臺,並將返回的json數據轉換成字元串彈出,以便知道是否請求成功,並且返回的數據是否正確
1 $.ajax({ 2 url: "/api/Person/getList", 3 type: "get", 4 success: function (data) { 5 alert(JSON.stringify(data)); 6 alert("成功"); 7 }, 8 error: function () { 9 alert("錯誤"); 10 } 11 });
後臺代碼
1 public class PersonController : ApiController 2 { 3 4 public List<Person> getList() 5 { 6 var PersonList = new List<Person>(){ 7 new Person{Name="張和",Sex="男",Duty="工程師",CompanyName="北京XX科技有限公司"}, 8 new Person{Name="張麗",Sex="女",Duty="工程師",CompanyName="北京XX科技有限公司"}, 9 new Person{Name="張春雷",Sex="男",Duty="工程師",CompanyName="北京XX科技有限公司"} 10 }; 11 return PersonList; 12 } 13 }
2.多個參數的Get請求,參數格式:data:{},例如 一個參數的get請求是data:{"Name":"張麗"},兩個參數:data:{"Name":"張麗","Sex":"女"},多個參數只是在{}裡加入多個參數而已。
1 $.ajax({ 2 url: "/api/Person/GetPerson", 3 type: "get", 4 data:{"Name":"張麗","Sex":"女"}, 5 success: function (data) { 6 alert(data.Name+" "+data.Duty+" "+data.CompanyName); 7 }, 8 error: function () { 9 alert("錯誤"); 10 } 11 });
後臺代碼
1 public Person GetPerson(string Name,string Sex) 2 { 3 var PersonList = new List<Person>(){ 4 new Person{Name="張和",Sex="男",Duty="工程師",CompanyName="北京XX科技有限公司"}, 5 new Person{Name="張麗",Sex="女",Duty="工程師",CompanyName="北京XX科技有限公司"}, 6 new Person{Name="張春雷",Sex="男",Duty="工程師",CompanyName="北京XX科技有限公司"} 7 }; 8 var p = PersonList.FirstOrDefault(f => f.Name == Name&&f.Sex==Sex); 9 return p; 10 }
最終效果
POST請求
1.無參數的POST請求
無參數的POST請求和GET請求是一樣的,只不過是ajax里的type:"get"改成type:"post"而已,後臺函數要加 [HttpPost]標簽,主要是標記該函數是post請求函數,如果get請求是請求不進去該函數的。
2.一個參數的POST請求
一個參數的post請求和GET請求的方式不一樣,後臺函數的參數必須用[FromBody]標記,這樣才能訪問到該函數,如果不加[FromBody] , ASP.NET Web API能夠正確的識別我們的UserController控制器處理Post /api/Person ,但卻不能找到一個可以接受的方法來處理請求。那麼有人就說了後臺參數加了[FromBody] ,js如下是不是就可以請求成功哪
1 $.ajax({ 2 url: "/api/Person/Post_Person", 3 type: "post", 4 data:{"Name":"張麗"}, 5 success: function (data) { 6 alert("成功"); 7 alert(data); 8 alert(data.Name + " " + data.CompanyName); 9 }, 10 error: function () { 11 alert("錯誤"); 12 } 13 });
答案是失敗的,確切的說是可以訪問到PersonControler里的Post_Person方法的,但是Post_Person函數的參數是獲取不到前臺ajax傳遞過來的值得,為什麼呢?是因為Web API 要求請求傳遞的 [FromBody] 參數,是有一個特定的格式,才能被正確的獲取到。而這種特定的格式並不是我們常見的 key=value 的鍵值對形式。Web API 的模型綁定器希望找到 [FromBody] 里沒有鍵名的值,也就是說, 不是 key=value ,而是 =value 。
所以將data:{"Name":"張麗"}改成data:{"":"張麗"} 這樣後臺函數才可以正確接收到傳遞過來的參數值
3.多個參數的POST請求
有人會認為多個參數的Post請求,就是後臺函數加多個帶[FromBody]標記的參數即可,如果你是這樣想的,那麼你錯了。請一定要記住多個參數POST請求,
[FromBody] 修飾的參數只能有一個 。我們需要對傳遞的多個參數進行封裝才行。
1 var Person = { 2 Name: "張麗", 3 Sex: "女", 4 Duty: "ddd", 5 } 6 7 $.ajax({ 8 url: "/api/Person/Post_PersonObj", 9 type: "post", 10 data: Person, 11 success: function (data) { 12 alert("成功"); 13 alert(data); 14 alert(data.Name + " " + data.CompanyName); 15 }, 16 error: function (data) { 17 alert(data.responseText); 18 } 19 });
後臺代碼
1 [HttpPost] 2 public Person Post_PersonObj([FromBody]Person per) 3 { 4 var PersonList = new List<Person>(){ 5 new Person{Name="張和",Sex="男",Duty="工程師",CompanyName="北京XX科技有限公司"}, 6 new Person{Name="張麗",Sex="女",Duty="工程師",CompanyName="北京XX科技有限公司"}, 7 new Person{Name="張春雷",Sex="男",Duty="工程師",CompanyName="北京XX科技有限公司"} 8 }; 9 var p = PersonList.FirstOrDefault(f => f.Name == per.Name&&f.Sex==per.Sex); 10 return p; 11 }
整個例子的源代碼下載地址:http://pan.baidu.com/s/1mgooA8K