Postman訪問Webapi的Get/Post/Put/Delte請求
問題場景:
ASP.NET MVC WebApi 定義Get/Post/Put/Delete方法。使用Postman工具調用相應的方法。根據方法的特性不同、參數的特性不同,所訪問的方式也不同。
問題分析:
創建一個新的WebApi的項目。控制器自動生成的代碼如下:
首先看到類的上面有個特性默認如下:
[Route("api/[controller]")]
這個是訪問時的路由規則(eg:http://localhost:port/api/conroller)。訪問地址時不需要輸入方法名,路由規則會根據參數的情況自動匹配。
建議將路由規則修改為
[Route("api/[controller]/[action]")]
這樣的話我們就能輸入方法名精確到我們需要訪問的方法。下面開始介紹Get/Post/Put/Delete請求。
1.頁面訪問Get請求方法:
以下為使用Postman時請求GET的簡單說明:

a) 特性為HttpGet
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
Postman使用GET請求,Url地址即可(eg:http://localhost:port/api/values/Get),如果該方法有參數,則在Params輸入對應的參數名和參數值即可(即url地址中尾部增加'?key1=val1&key2=val2')。得到的返回值是["value1","value2"]
b) 特性為HttpGet("{name}")
[HttpGet("{id}")]
public int Get(int id)
{
return id;
}
[HttpGet("{id}")]這個特性是自動生成的,具體的話沒有深入的研究。請求的參數方式會有些不同。他所攜帶的參數請求規則為:
http://localhost:54261/api/values/Get/idvalue 。
2.頁面訪問POST請求方法:

a) 參數為基本數據類型
[HttpPost]
public string Post(string str)
{return str;
}
Headers框下方的"Content-Type" 所對應的值應為 "application/x-www-form-urlencoded"
然后在"Body"框下輸入對應的參數名和參數值,點擊"Send"按鈕即可請求並且得到返回值。
b) 參數特性被標記為[FromBody]
[HttpPost]
public string Post([FromBody]string value)
{return value;
}
假若傳遞的參數類型的特性為[FromBody]時,需要注意:作為被標記為[FromBody]的參數只能出現一次,並且 [FromBody] 參數不能是基本的數據類型(如byte、int、bool、DateTime、string等)。
所以以上的方法是不能被訪問到的。
c) [FromBody]標記的參數為對象
public class ReqTest
{
public int id { get; set; }
public string name { get; set; }
}[HttpPost]
public string Post([FromBody]ReqTest req)
{
return req.id.ToString() + req.name;
}
[FromBody]標記參數需要使用json的格式進行傳遞。
Headers框下方的"Content-Type" 所對應的值應為 "application/json"
然后在"Body"框下選擇"raw",輸入json格式的參數進行訪問(eg:{"id":9527,"name":"Mark"})。
得到的返回值為"9527Mark"
3.HTTP PUT/Delete請求方式:
PUT請求和Delete請求實際用到的情況不是很多。使用方式跟POST差不多,只需要注意將Postman的請求方式改成對應的PUT或者Delete方式即可。
