一张图说明 Web Api 参数绑定默认规则

请求如下:

控制器如下:

慎重说明:不管请求方式是 get 还是 post , 简单类型的参数,如 name 和 id ,其值都是从 url 里面去取.
Web API 从 url 还是 body 获取 简单类型参数的值,跟客户端提交的方式没有任何关系,只跟 [FromBody] 和 [FromUri] 有关系
这里还有两个需要注意的地方:
1.get 请求
如果是通过 Get 方式获取基础类型参数,比如:

那么,传入的参数个数不能比接收的少,比如:
正确写法:
http://localhost:57895/api/test/TestParam?name=www&id=1
或者
http://localhost:57895/api/test/TestParam?name=www&id=1&age=100
但是,下面这种写法请求不到api
http://localhost:57895/api/test/TestParam?name=www
2.post请求
如果想通过 Post 方式获取基础类型参数,比如:

通常,大家都会这样写:
$.ajax({
type: "post",
url: "http://localhost:42561/api/order/pager",
data: "{ name: 'wjire' }",
contentType: "application/json",
success: function () {
}
});
又或者这样写:
$.ajax({
type: "post",
url: "http://localhost:42561/api/order/pager",
data: { name: "wjire" },
contentType: "application/x-www-form-urlencoded",
success: function () {
}
});
但,都是错的!!
正确写法是这样的:
$.ajax({
type: "post",
url: "http://localhost:42561/api/order/pager",
data: { "": "hello" },
contentType: "application/x-www-form-urlencoded",
success: function () {
}
});
相当恶心的写法,但确实是对的,
但是问题又来了,Web Api 是不支持入参有多个 FromBody 的,也就是说,Web Api只允许一个参数读取请求主体中的数据。
[HttpPost]
public bool Pager([FromBody]string NAME, [FromBody] string DES)
{
return true;
}
$.ajax({
type: "post",
url: "http://localhost:42561/api/order/pager",
data: { "": "hello","":123 },
contentType: "application/x-www-form-urlencoded",
success: function () {
}
});
这种写法,是错误的!
因此,如果是从body中取基本类型参数,我们一般都会封装成实体,如开篇截图的例子.
问题又来了,因为如果我们前后台每次传递多个参数的post请求都去新建一个类的话,我们系统到时候会有很多这种参数类?维护起来那是相当的麻烦的一件事,这时候用 dynamic 是一个不错的选择,如:
$.ajax({
type: "post",
url: "http://localhost:42561/api/order/pager",
data: '{ name: "hello", id: 123 }',
contentType: "application/json",
success: function () {
}
});

其次还可以用 Dictionary ,比如:


不过,貌似没有 dynamic 高级.
实体类参数的传递就简单多了,两种方式:
方式一:
data: { name: "hello", id: 1233333 },
contentType: "application/x-www-form-urlencoded",//可以不写,默认就是这个格式
方式二:
data: "{ name: 'hello', id: 123 }",
contentType: "application/json",
一张图说明 Web Api 参数绑定默认规则的更多相关文章
- 细说 Web API参数绑定和模型绑定
今天跟大家分享下在Asp.NET Web API中Controller是如何解析从客户端传递过来的数据,然后赋值给Controller的参数的,也就是参数绑定和模型绑定. Web API参数绑定就是简 ...
- Parameter Binding in ASP.NET Web API(参数绑定)
Parameter Binding in ASP.NET Web API(参数绑定) 导航 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnbl ...
- Web API(四):Web API参数绑定
在这篇文章中,我们将学习Web API如何将HTTP请求数据绑定到一个操作方法的参数中. 操作方法在Web API控制器中可以有一个或多个不同类型的参数.它可以是基本数据类型或复杂类型.Web API ...
- Asp.Net Web API 2第十六课——Parameter Binding in ASP.NET Web API(参数绑定)
导航 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html. 本文主要来讲解以下内容: ...
- .net core Web API参数绑定规则
参数推理绑定 先从一个问题说起,微信小程序按照WebAPI定义的参数传递,Get请求服务器端可以正常接收到参数,但是Post请求取不到. Web API代码(.netcore 3.1)如下: [Htt ...
- asp.net web api参数
翻译自:http://www.c-sharpcorner.com/article/parameter-binding-in-asp-net-web-api/ 主要自己学习下,说是翻译,主要是把文章的意 ...
- Web API 2 自定义默认Identity Table Name
One of the first issues you will likely encounter when getting started with ASP.NET Identity centers ...
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十三)台风模块
config.xml文件的配置如下: <widget label="台风" icon="assets/images/typhoon.png" config ...
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十一)路径导航模块
config.xml文件的配置如下: <widget label="路径导航" icon="assets/images/lujingdaohang.png" ...
随机推荐
- 深度剖析HashMap的数据存储实现原理(看完必懂篇)
深度剖析HashMap的数据存储实现原理(看完必懂篇) 具体的原理分析可以参考一下两篇文章,有透彻的分析! 参考资料: 1. https://www.jianshu.com/p/17177c12f84 ...
- 自增ID算法snowflake(雪花)
在数据库主键设计上,比较常见的方法是采用自增ID(1开始,每次加1)和生成GUID.生成GUID的方式虽然简单,但是由于采用的是无意义的字符串,推测会在数据量增大时造成访问过慢,在基础互联网的系统设计 ...
- Python之list列表方法详解
# 列表test = [11, 22, 33, 44, 55, 22]# append方法,在test列表末尾增加一个元素# append(self, p_object) 参数:p_object:待添 ...
- javascript 原型及原型链详解
我们创建的每个函数都有一个 prototype (原型)属性,这个属性是一个指针,指向一个原型对象,而这个原型对象中拥有的属性和方法可以被所以实例共享. function Person(){ } Pe ...
- Java环境变量,真的还有必要配吗?
作为年龄上堪称老鸟而技术上却是菜鸟的老菜鸟,为了祖国的编程事业,不惜拿出一个月工资,淘了一台配置稍高的二手笔记本,打算与老笔记本中的撸啊撸片彻底说再见,誓要在新机种开启一番撸啊撸的新事业.当然,撸代码 ...
- APNS IOS 消息推送JSON格式介绍
在开发向苹果Apns推送消息服务功能,我们需要根据Apns接受的数据格式进行推送.下面积累了我在进行apns推送时候总结的 apns服务接受的Json数据格式 示例 1: 以下负载包含哦一个简单的 a ...
- Loadrunner11不能调用IE8解决方法大全
刚安装了英文版的Loadrunner 11, 用的是IE8, 开始录制时没有启动IE, 试了网上很多的方法,最终解决了问题.总结一般产生问题的原因如下. 1.当你主机上有多个浏览器时,loadrunn ...
- 剑指Offer-对称的二叉树
package Tree; /** * 对称的二叉树 * 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. */ public class ...
- 笔记:Spring Boot 配置详解
Spring Boot 针对常用的开发场景提供了一系列自动化配置来减少原本复杂而又几乎很少改动的模板配置内容,但是,我们还是需要了解如何在Spring Boot中修改这些自动化的配置,以应对一些特殊场 ...
- 基于hi-nginx的web开发(python篇)——动态路由和请求方法
hi.py的提供的路由装饰器接受两个参数,第一个参数指定动态路由的正则模式,第二个参数指定同意的http请求方法列表. 比如: @app.route(r"^/client/?$", ...