api.ajax调用接口接口多个文件上传怎么传参

 作者:懒得安分

 post请求的基础类型嘚参数和get请求有点不一样我们知道get请求的参数是通过url来传递的,而post请求则是通过http的请求体中传过来的WebApi的post请求也需要从http的请求体里面去取参数。

这是一种另许多人头痛的写法但是没办法,这样确实能得到我们的结果:

我们一般的通过url取参数的机制是键值对即某一个key等於某一个value,而这里的FromBody和我们一般通过url取参数的机制则不同它的机制是=value,没有key的概念并且如果你写了key(比如你的ajax调用接口参数写的{NAME:"Jim"}),后台反而得到的NAME等于null不信你可以试试。

上面讲的都是传递一个基础类型参数的情况那么如果我们需要传递多个基础类型呢?按照上面的推論是否可以([FromBody]string NAME, [FromBody]string DES)这样写呢。试试便知

既然上面的办法行不通,那我们如何传递多个基础类型的数据呢很多的解决办法是新建一个类去包含传递的参数,博主觉得这样不够灵活因为如果我们前后台每次传递多个参数的post请求都去新建一个类的话,我们系统到时候会有多少个這种参数类维护起来那是相当的麻烦的一件事!所以博主觉得使用dynamic是一个很不错的选择。我们来试试

通过dynamic动态类型能顺利得到多个参數,省掉了[FromBody]这个累赘并且ajax调用接口参数的传递不用使用"无厘头"的{"":"value"}这种写法,有没有一种小清新的感觉~~有一点需要注意的是这里在ajax调用接ロ的请求里面需要加上参数类型为Json即 contentType:

通过上文post请求基础类型参数的传递,我们了解到了dynamic的方便之处为了避免[FromBody]这个累赘和{"":"value"}这种"无厘头"的寫法。博主推荐所有基础类型使用dynamic来传递方便解决了基础类型一个或多个参数的传递,示例如上文 

(1)单个实体作为参数

上面我们通過dynamic类型解决了post请求基础类型数据的传递问题,那么当我们需要传递一个实体作为参数该怎么解决呢我们来看下面的代码便知:

原理解释:使用实体作为参数的时候,前端直接传递普通json后台直接使用对应的类型去接收即可,不用FromBody但是这里需要注意的一点就是,这里不能指定contentType为appplication/json否则,参数无法传递到后台我们来看看它默认的contentType是什么:

为了弄清楚原因,博主查了下http的Content-Type的类型看到如下说明:

也就是说post请求默认是将表单里面的数据的key/value形式发送到服务,而我们的服务器只需要有对应的key/value属性值的对象就可以接收到而如果使用application/json,则表示将前端嘚数据以序列化过的json传递到后端后端要把它变成实体对象,还需要一个反序列化的过程按照这个逻辑,那我们如果指定contentType为application/json然后传递序列化过的对象应该也是可以的啊。博主好奇心重还是打算一试到底,于是就有了下面的代码:

尝试成功也就是说,两种写法都是可荇的如果你指定了contentType为application/json,则必须要传递序列化过的对象;如果使用post请求的默认参数类型则前端直接传递json类型的对象即可。 

(2)实体和基礎类型一起作为参数传递

有些时候我们需要将基础类型和实体一起传递到后台,这个时候我们神奇的dynamic又派上用场了。

4、后台发送请求參数的传递

上面写了那么多都是通过前端的ajax调用接口请求去做的,我们知道如果调用方不是web项目,比如Android客户端可能需要从后台发送http請求来调用我们的接口方法,如果我们通过后台去发送请求是否也是可行的呢我们以实体对象作为参数来传递写写代码试一把。

     //请求路径 //设置参数的编码格式解决中文乱码 //获取相应的状态代码

温馨提示:虚拟产品一经售出概鈈退款(使用遇到问题,请及时私信上传者)

一个资源只可评论一次评论内容不能少于5个字

我要回帖

更多关于 ajax调用接口 的文章

 

随机推荐