出处:http://blog.csdn.net/qq373591361/article/details/51508806

我们总结一下用js请求服务器的传参方法。

Get方式

Get主要是用来查询,一般分为无参,一个参数,多个参数,实体对象参数。

1、无参

  1. //Get没有参数
  2. var get_f1 = function() {
  3. $.ajax({
  4. type: "get",
  5. url: "/api/Demo",
  6. success: function(data, status) {
  7. if (status == "success") {
  8. $("#div_test").html(data);
  9. }
  10. }
  11. });
  12. }

2、一个参数

  1. //Get一个参数
  2. var get_f2 = function() {
  3. $.ajax({
  4. type: "get",
  5. url: "/api/Demo",
  6. data: { strQuery: JSON.stringify({ Id: "1", Name: "Jim", CreateTime: "1988-09-11" }) },
  7. contentType: "application/json",
  8. success: function(data, status) {
  9. if (status == "success") {
  10. $("#div_test").html(data);
  11. }
  12. }
  13. });
  14. }

后台控制器方法

  1. /// <summary>
  2. /// 一个参数
  3. /// </summary>
  4. /// <param name="strQuery"></param>
  5. /// <returns></returns>
  6. [HttpGet]
  7. public string Get(string strQuery)
  8. {
  9. //一个参数的时候,如果前端是传过来的是字符串的json可以反序列化成对象。
  10. //TbCharging oData = Newtonsoft.Json.JsonConvert.DeserializeObject<TbCharging>(strQuery);
  11. //return String.Format("{0},{1},{2},{3}", oData.Id, oData.Name, oData.Des, oData.CreateTime.ToString("yyyy-MM-dd hh:mm:ss"));
  12. return "一个参数" + strQuery;
  13. }

备注:在Get方式的时候我们也可以把参数放在url,我这里为了前台写得统一些,全都放在data里面,感觉好看一点。

3、多个参数

  1. //Get多个参数
  2. var get_f3 = function() {
  3. $.ajax({
  4. type: "get",
  5. url: "/api/Demo",
  6. data: { Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
  7. success: function(data, status) {
  8. if (status == "success") {
  9. $("#div_test").html(data);
  10. }
  11. }
  12. });
  13. }

后台控制器方法

  1. /// <summary>
  2. /// 多个参数
  3. /// </summary>
  4. /// <param name="Id"></param>
  5. /// <param name="Name"></param>
  6. /// <param name="CreateTime"></param>
  7. /// <returns></returns>
  8. [HttpGet]
  9. public string Get(int Id, string Name, DateTime CreateTime)
  10. {
  11. return String.Format("多个参数,{0},{1},{2}", Id, Name, CreateTime.ToString("yyyy-MM-dd hh:mm:ss"));
  12. }

4、一个实体对象参数

  1. //Get实体对象作为参数
  2. var get_f4 = function() {
  3. $.ajax({
  4. type: "get",
  5. url: "/api/Demo/GetModel",
  6. data: { Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
  7. success: function(data, status) {
  8. if (status == "success") {
  9. $("#div_test").html(data);
  10. }
  11. }
  12. });
  13. }

备注:到这里有没有发现多个参数和一个实体对象的请求方法是一样的,假如两个接收的方法都写在同一个控制器里面的话,路由是区分不出来要匹配那个方法处理,

所以要用自定义路由来区分,在WebApi里面改方法名字是没有用的。

后台控制器方法

  1. /// <summary>
  2. /// 一个实体对象参数
  3. /// </summary>
  4. /// <param name="oData"></param>
  5. /// <returns></returns>
  6. [HttpGet]
  7. [Route("GetModel")]
  8. public string Get([FromUri]TbCharging oData)
  9. {
  10. return String.Format("一个实体对象参数,{0},{1},{2},{3}", oData.Id, oData.Name, oData.Des, oData.CreateTime.ToString("yyyy-MM-dd hh:mm:ss"));
  11. }

备注:在使用Get传递实体对象参数的时候要注意,因为Get方式的时候参数是写在url的,所以我们在后台用[FromBody]是拿不到实体参数的,需要写[FromUri]才行。

Post方式

Post方式我们一般用来做增、删、改操作。在WebApi中Post仅仅用来做增加操作,修改用Put,删除用Delete。这些在新建模板的时候就自动为我们生成了。

还有要提一下的是Post只能传递一个参数,如果需要多个参数的时候我们需要把它们合并成一个扩展对象,当做对象来传递。

在后台接收的时候我们需要在参数列表里面写上[FromBody]因为Post方式的参数就不在Url里面了。

1、一个参数

  1. //Post一个参数
  2. var post_f1 = function() {
  3. $.ajax({
  4. type: "post",
  5. url: "/api/Demo",
  6. data: { "": "Jim" },
  7. //data: "=Jim", //两种写法,其他写法获取不到值
  8. success: function(data, status) {
  9. if (status == "success") {
  10. $("#div_test").html(data);
  11. }
  12. }
  13. });
  14. }

注意:在写参数的时候我们不能把参数写成 data:{"name":"Jim"} 这种方式,因为在后台是拿不到值的。

后台控制器方法

  1. /// <summary>
  2. /// 一个参数
  3. /// </summary>
  4. /// <param name="name"></param>
  5. /// <returns></returns>
  6. public string Post([FromBody]string name)
  7. {
  8. return "一个参数," + name;
  9. }

2、一个实体对象参数

  1. //Post一个对象(Post不能提交多个参数,只能将多个参数封装成一个对象)
  2. var post_f2 = function () {
  3. var postdata = { Id: "1", Name: "Jim", CreateTime: "1988-09-11" };
  4. $.ajax({
  5. type: "post",
  6. url: "/api/Demo/PostAdd",//多个post的时候,路由会匹配不到,所以要自定义路由
  7. //data: { Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
  8. data: postdata,
  9. success: function (data, status) {
  10. if (status == "success") {
  11. $("#div_test").html(data);
  12. }
  13. }
  14. });
  15. }

后台控制器方法

  1. /// <summary>
  2. /// 一个对象
  3. /// </summary>
  4. /// <param name="oData"></param>
  5. /// <returns></returns>
  6. [HttpPost]
  7. [Route("PostAdd")]
  8. public object Post([FromBody]TbCharging oData)
  9. {
  10. var strName = String.Format("一个对象,{0},{1}", oData.Id, oData.Name);
  11. return strName;
  12. }

备注:这里参数列表最好写上[FromBody],虽然不写也能拿到值。

3、一个数组参数

  1. //Post数组作为参数
  2. var post_f3 = function () {
  3. var arr = ["1", "2", "3", "4"];
  4. $.ajax({
  5. type: "post",
  6. url: "/api/Demo/PostArray",
  7. contentType: 'application/json',
  8. data: JSON.stringify(arr),
  9. success: function (data, status) {
  10. if (status == "success") {
  11. $("#div_test").html(data);
  12. }
  13. }
  14. });
  15. }

这里我们说一下contentType和dataType。

contentType

发送信息至服务器时内容编码类型。假如你不写的话,默认值是: "application/x-www-form-urlencoded"。

dataType

预期服务器返回的数据类型。

如果我们Post提交的是json参数,最好就写上 contentType: 'application/json'

后台的控制器方法

  1. /// <summary>
  2. /// 数组作为参数
  3. /// </summary>
  4. /// <param name="ids"></param>
  5. /// <returns></returns>
  6. [HttpPost]
  7. [Route("PostArray")]
  8. public object Post(string[] ids)
  9. {
  10. return String.Format("{0},{1},{2}", ids[0], ids[1], ids[2]);
  11. }

4、实体集合参数

  1. //Post对象集合,多个相同对象(多个不同对象的时候可以将多个对象封装成一个扩展对象)
  2. var post_f4 = function () {
  3. var arr = [
  4. { Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
  5. { Id: "2", Name: "Lilei", CreateTime: "1990-12-11" },
  6. { Id: "3", Name: "Lucy", CreateTime: "1986-01-10" }
  7. ];
  8. $.ajax({
  9. type: "post",
  10. url: "/api/Demo/PostMulti",//多个post的时候,路由会匹配不到,所以要自定义路由
  11. contentType: 'application/json',
  12. data: JSON.stringify(arr),
  13. success: function (data, status) {
  14. if (status == "success") {
  15. $("#div_test").html(data);
  16. }
  17. }
  18. });
  19. }

后台的控制器方法

  1. /// <summary>
  2. /// 对象集合
  3. /// </summary>
  4. /// <param name="lstCharging"></param>
  5. /// <returns></returns>
  6. [HttpPost]
  7. [Route("PostMulti")]
  8. public object Post([FromBody]List<TbCharging> lstCharging)
  9. {
  10. return String.Format("{0},{1}", lstCharging[0].Name, lstCharging[1].Name);
  11. }

自定义路由

使用场景:用于方法重载,忽略方法名,自定义url

使用步骤:

1、在控制器类上方加入一个标记

  1. [RoutePrefix("api/Demo")]
  2. public class DemoController : ApiController
  3. {}

2、在方法中加入路由标记

  1. /// <summary>
  2. /// 数组作为参数
  3. /// </summary>
  4. /// <param name="ids"></param>
  5. /// <returns></returns>
  6. [HttpPost]
  7. [Route("PostArray")]
  8. public object Post([FromBody]string[] ids)
  9. {
  10. return String.Format("{0},{1},{2}", ids[0], ids[1], ids[2]);
  11. }

备注:上面的api/Demo和PostArray可以自己定义名字。像我这样写就可以直接用 url:"/api/Demo/PostArray"来访问了。

MVC和WebApi 使用get和post 传递参数(转)的更多相关文章

  1. MVC和WebApi 使用get和post 传递参数。

    我们总结一下用js请求服务器的传参方法. Get方式 Get主要是用来查询,一般分为无参,一个参数,多个参数,实体对象参数. 1.无参 //Get没有参数 var get_f1 = function( ...

  2. MVC和WebApi 使用get和post 传递参数。 转载https://blog.csdn.net/qq373591361/article/details/51508806

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq373591361/article/details/51508806我们总结一下用js请求服务器的 ...

  3. MVC怎么在当前视图中,传递参数给到另外一个视图?

    在TransData.cshtml视图中: <div> <!--在一个视图中,请求另外一个视图,并且将数据传到另外一个视图--> <!--视图中调用无返回值的方法,需要加 ...

  4. SlickOne -- 基于Dapper, Mvc和WebAPI 的快速开发框架

    前言:在两年前,项目组推出了基于Dapper,Mvc和WebApi的快速开发框架,随着后续Slickflow产品的实践和应用,今再次对SlickOne项目做以回顾和总结.其目的是精简,持续改进,保持重 ...

  5. 【WebApi系列】详解WebApi如何传递参数

    WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...

  6. SlickOne敏捷开发框架介绍(一) -- 基于Dapper, Mvc和WebAPI 的快速开发框架

    前言:在两年前(最初发布时间:2013年1月9日(csdn),当前文章时间2015年11月10日),项目组推出了基于Dapper,Mvc和WebApi的快速开发框架,随着后续Slickflow产品的实 ...

  7. WebAPI学习日记一:Ajax请求传递参数遇到的问题

    首先,本人大学刚毕业,想把自己学习的一些东西记录下来,也是和大家分享,如有不对之处还请多加指正.声明:但凡是我博客里的文章均是本人实际操作遇到的例子,不会随便从网上拷贝或者转载,本着对自己和观众负责的 ...

  8. MVC 从后台页面 取前台页面传递过来的值的几种取法

      MVC 从后台页面 取前台页面传递过来的值的几种取法   <1>前台页面 Index视图 注意:用户名表单的name值为txtName 密码表单的name值为txtPassword & ...

  9. 给Asp.Net MVC及WebApi添加路由优先级

    一.为什么需要路由优先级 大家都知道我们在Asp.Net MVC项目或WebApi项目中注册路由是没有优先级的,当项目比较大.或有多个区域.或多个Web项目.或采用插件式框架开发时,我们的路由注册很可 ...

随机推荐

  1. Python ---- list和dict遍历

    refer to: http://www.cnblogs.com/icejoywoo/p/3531869.html 对于python3, 可能有不一样之处,   refer to: http://do ...

  2. python基于协程的网络库gevent、eventlet

    python网络库也有了基于协程的实现,比较著名的是 gevent.eventlet 它两之间的关系可以参照 Comparing gevent to eventlet, 本文主要简单介绍一下event ...

  3. Python学习思维导图

     刚学习Python时,边学边总结的,采用思维导图的形式, 适合回顾使用.内容参考<Python:从入门到实践>一书.   再给出一张Datacamp网站上的一张关于Python基础的总结 ...

  4. 关于CCRANDOM_0_1

    CCRANDOM_0_1的范围是[0,1)包括0但不包括1 CCRANDOM_0_1() * 1400.0f / 100.0f是0-13 另外每次随机都是相同的数,要随机下种子 srand((unsi ...

  5. Android 基础题目

    1. BroadcastReceiver 在UI thread? BroadcastReceiver 总是在UI thread, If you register your BroadcastRecei ...

  6. git push 免密码

    git push 免密码 通用情况 使用ssh协议 git add 使用tab键自动补全的中文文件名乱码 jupyter notebook 创建密码 git push 免密码 通用情况 1.使用文件创 ...

  7. ab压力测试之post与get请求

    安装ab工具 yum install httpd-tools 参数说明 -n:执行的请求个数,默认时执行一个请求 -c:一次产生的请求个数,即并发个数 -p:模拟post请求,文件格式为gid=2&a ...

  8. Java中数组转为List三种情况的优劣对比,常犯的类型转换错误原因解析

    一.最常见方式(未必最佳)通过 Arrays.asList(strArray) 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常. 关键代码:List list = Arrays. ...

  9. 黄聪:Wordpress程序Mysql查询导致CPU100%,页面错误增量飙高解决方案

    最近做的网站,访客一多,CPU就会飙到100%,找了网上很多解决方案,用了下面的方法进行优化: 1.mysql开启慢查询方法: 在my.ini的[mysqld]添加如下语句: log-slow-que ...

  10. scrollTop、offsetHeight和offsetTop等属性用法详解--转转转

    scrollTop.offsetHeight和offsetTop等属性用法详解: 标题中的几个相关相关属性在网页中有这大量的应用,尤其是在运动框架中,但是由于有些属性相互之间的概念比较混杂或者浏览器兼 ...