.Net中使用WebApi參數接收一直是個問題,不同的傳參方式後臺接收的方式也不一樣。之後.Net Core出來後WebApi也發生了變化,在.Net Framework時WebApi是有單獨的ApiController的,在.Net Core時沒有獨立的ApiController了,這樣接收參數上也會有一定的區別。傳參有兩種Get和Post方式,通過使用發現Get方式接受參數主要是Url傳遞其實還是比較簡單的,Post方式就比較特殊了,內容是放在Body中的,因此不同時形式的傳遞方式接收就不一樣了,爲此做了個Demo測試了不同的傳參方式對應的不同的接收方式,做了Post參數接收方式表格僅供參考。日後在使用WebApi開發時可以參考下。
.Net Core下的WebApi接口 | |||||||||||
參數 調用方式 |
字符串 | 多個字符參數 | [FromBody]特性字符串 | 實體類 | [FromBody]特性實體類 | 動態類型 | [FromBody]特性動態類型 | [FromForm]特性實體類 | [FromForm]特性字符串 | [FromForm]特性多個字符串 | [FromForm]特性動態類型 |
示例 | string userid | string userid ,string name | [FromBody]string userid | UserDto dto | [FromBody]UserDto dto | dynamic dto | [FromBody]dynamic dto | [FromForm]UserDto dto | [FromForm]string userid | [FromForm]string userid, [FromForm] string name | [FromForm]dynamic dto |
(PostMan)通過url傳參 | Y | Y | N | N | N | N | N | N | N | N | N |
(PostMan)form-data | N | N | N | N | N | Y | N | Y | Y | Y | N |
(PostMan)x-www-from-urlencoded | N | N | N | N | N | Y | N | Y | Y | Y | N |
(PostMan)Json application/json | N | N | N | N | Y | N | Y | N | N | N | N |
.NetCore HttpClient 通過HttpContent內容爲Dictionary鍵值對形式 | N | N | N | N | N | N | N | Y | Y | Y | N |
.NetCore HttpClient 通過HttpContent內容爲Json格式 | N | N | N | Y | Y | Y | Y | N | N | N | N |
.Net HttpWebRequest Dictionary鍵值對形式 | N | N | N | N | N | N | N | Y | Y | Y | N |
.Net HttpWebRequest 內容爲Json格式 | N | N | N | Y | Y | Y | Y | N | N | N | N |
.Net HttpClient Dictionary鍵值對形式 | N | N | N | N | N | N | N | Y | Y | Y | N |
.Net HttpClient 內容爲Json格式 | N | N | N | Y | Y | Y | Y | N | N | N | N |
.Net Framework下的WebApi接口 | |||||||
參數 調用方式 |
字符串 | 多個字符參數 | [FromBody]特性字符串 | 實體類 | [FromBody]特性實體類 | 動態類型 | [FromBody]特性動態類型 |
示例 | string userid | string userid ,string name | [FromBody]string userid | UserDto dto | [FromBody]UserDto dto | dynamic dto | [FromBody]dynamic dto |
(PostMan)通過url傳參 | Y | Y | N | N | N | N | N |
(PostMan)form-data | N | N | N | N | N | Y | N |
(PostMan)x-www-from-urlencoded | N | N | N | Y | Y | N | N |
(PostMan)Json application/json | N | N | N | Y | Y | Y | Y |
.NetCore HttpClient 通過HttpContent內容爲Dictionary鍵值對形式 | N | N | N | Y | Y | N | N |
.NetCore HttpClient 通過HttpContent內容爲Json格式 | N | N | N | Y | Y | Y | Y |
.Net HttpWebRequest Dictionary鍵值對形式 | N | N | N | Y | Y | N | N |
.Net HttpWebRequest 內容爲Json格式 | N | N | N | Y | Y | Y | Y |
.Net HttpClient Dictionary鍵值對形式 | N | N | N | Y | Y | N | N |
.Net HttpClient 內容爲Json格式 | N | N | N | Y | Y | Y | Y |
TIP:Y表示可以接收此類型參數,N表示不能接收此類型參數
以上測試我有通過PostMan工具的各種方式測試,其中通過程序後臺調用的是自己封裝的HttpClient和HttpWebRequest類庫來調用測試,分.Net Framework和.Net Core版本來測試的,下次把測試代碼也附上。