WebApi参数接收参考
.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版本来测试的,下次把测试代码也附上。