GET请求

1.无参数get请求

一般get请求有两种写法,一种是 $.get()   一种是$.ajax({type:"get"}), 我个人比较喜欢用后者。

下面例子主要是get无参数请求,获取人员列表并将数据返回到前台,并将返回的json数据转换成字符串弹出,以便知道是否请求成功,并且返回的数据是否正确

  1. 1 $.ajax({
  2. 2 url: "/api/Person/getList",
  3. 3 type: "get",
  4. 4 success: function (data) {
  5. 5 alert(JSON.stringify(data));
  6. 6 alert("成功");
  7. 7 },
  8. 8 error: function () {
  9. 9 alert("错误");
  10. 10 }
  11. 11 });

后台代码

  1. 1 public class PersonController : ApiController
  2. 2 {
  3. 3
  4. 4 public List<Person> getList()
  5. 5 {
  6. 6 var PersonList = new List<Person>(){
  7. 7 new Person{Name="张和",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"},
  8. 8 new Person{Name="张丽",Sex="女",Duty="工程师",CompanyName="北京XX科技有限公司"},
  9. 9 new Person{Name="张春雷",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"}
  10. 10 };
  11. 11 return PersonList;
  12. 12 }
  13. 13 }

2.多个参数的Get请求,参数格式:data:{},例如 一个参数的get请求是data:{ " Name": " 张丽 " },两个参数:data:{ " Name ": " 张丽 ","Sex":"女" },多个参数只是在{}里加入多个参数而已。

  1. 1 $.ajax({
  2. 2 url: "/api/Person/GetPerson",
  3. 3 type: "get",
  4. 4 data:{"Name":"张丽","Sex":"女"},
  5. 5 success: function (data) {
  6. 6 alert(data.Name+" "+data.Duty+" "+data.CompanyName);
  7. 7 },
  8. 8 error: function () {
  9. 9 alert("错误");
  10. 10 }
  11. 11 });

后台代码

  1. 1 public Person GetPerson(string Name,string Sex)
  2. 2 {
  3. 3 var PersonList = new List<Person>(){
  4. 4 new Person{Name="张和",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"},
  5. 5 new Person{Name="张丽",Sex="女",Duty="工程师",CompanyName="北京XX科技有限公司"},
  6. 6 new Person{Name="张春雷",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"}
  7. 7 };
  8. 8 var p = PersonList.FirstOrDefault(f => f.Name == Name&&f.Sex==Sex);
  9. 9 return p;
  10. 10 }

POST请求

1.无参数的POST请求

无参数的POST请求和GET请求是一样的,只不过是ajax里的type:"get"改成type:"post"而已,后台函数要加 [HttpPost]标签,主要是标记该函数是post请求函数,如果get请求是请求不进去该函数的。

2.一个参数的POST请求

一个参数的post请求和GET请求的方式不一样,后台函数的参数必须用[FromBody]标记,这样才能访问到该函数,如果不加[FromBody] , ASP.NET Web API能够正确的识别我们的UserController 控制器处理Post / api/Person ,但却不能找到一个可以接受的方法来处理请求。不加[frombody],用url传值可以访问到,类似于

/api/Person/Post_Person?name="张丽"。那么有人就说了后台参数加了[FromBody] ,js如下是不是就可以请求成功哪

  1. 1 $.ajax({
  2. 2 url: "/api/Person/Post_Person",
  3. 3 type: "post",
  4. 4 data:{"Name":"张丽"},
  5. 5 success: function (data) {
  6. 6 alert("成功");
  7. 7 alert(data);
  8. 8 alert(data.Name + " " + data.CompanyName);
  9. 9 },
  10. 10 error: function () {
  11. 11 alert("错误");
  12. 12 }
  13. 13 });

答案是失败的,确切的说是可以访问到PersonControler里的Post_Person方法的,但是Post_Person函数的参数是获取不到前台ajax传递过来的值得,为什么呢?是因为Web API 要求请求传递的 [FromBody] 参数,是有一个特定的格式,才能被正确的获取到。而这种特定的格式并不是我们常见的 key=value 的键值对形式。Web API 的模型绑定器希望找到 [FromBody] 里没有键名的值,也就是说, 不是 key=value ,而是 =value 。

所以 将data:{"Name":"张丽" }改成data:{"":"张丽" } 这样后台函数才可以正确接收到传递过来的参数值

3.多个参数的POST请求

有人会认为多个参数的Post请求,就是后台函数加多个带[FromBody]标记的参数即可,如果你是这样想的,那么你错了。请一定要记住多个参数POST请求,

[FromBody] 修饰的参数只能有一个 。我们需要对传递的多个参数进行封装才行。

  1. 1 var Person = {
  2. 2 Name: "张丽",
  3. 3 Sex: "女",
  4. 4 Duty: "ddd",
  5. 5 }
  6. 6
  7. 7 $.ajax({
  8. 8 url: "/api/Person/Post_PersonObj",
  9. 9 type: "post",
  10. 10 data: Person,
  11. 11 success: function (data) {
  12. 12 alert("成功");
  13. 13 alert(data);
  14. 14 alert(data.Name + " " + data.CompanyName);
  15. 15 },
  16. 16 error: function (data) {
  17. 17 alert(data.responseText);
  18. 18 }
  19. 19 });

后台代码

  1. 1 [HttpPost]
  2. 2 public Person Post_PersonObj([FromBody]Person per)
  3. 3 {
  4. 4 var PersonList = new List<Person>(){
  5. 5 new Person{Name="张和",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"},
  6. 6 new Person{Name="张丽",Sex="女",Duty="工程师",CompanyName="北京XX科技有限公司"},
  7. 7 new Person{Name="张春雷",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"}
  8. 8 };
  9. 9 var p = PersonList.FirstOrDefault(f => f.Name == per.Name&&f.Sex==per.Sex);
  10. 10 return p;
  11. 11 }

ajax GET和POST请求web api 的几种方式的更多相关文章

  1. 【.Net】调用Web API的几种方式

    引言 记录一下调用Web API的几种方式,以调用百度API为例. HttpWebRequest HttpWebRequest位于System.Net命名空间,是常用的调用Web API类库. str ...

  2. .Net Core使用HttpClient请求Web API注意事项

    HttpClient 使用HttpClient可以很方便的请求Web API,但在使用时有一些需要注意的地方,不然会给你的程序带来毁灭性的问题. HttpClient是一个继承了IDisposable ...

  3. Struts2中访问web元素的四种方式

    Struts2中访问web元素的四种方式如下: 通过ActionContext来访问Map类型的request.session.application对象. 通过实现RequestAware.Sess ...

  4. Tomcat中部署web应用的三种方式

    Tomcat中部署web应用的三种方式(静态部署)       第一种,针对war或解压后的war,最为常用的是直接操作webapp目录,将完整的war包或者web应用直接放到webapp目录下.使用 ...

  5. 在Tomcat中部署web项目的三种方式

    搬瓦工搭建SS教程 SSR免费节点:http://www.xiaokeli.me 在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Man ...

  6. #Eclipse web工程 部署 三种方式 3

    Eclipse web工程 部署 三种方式 3.热部署 在Eclipse中,实现 修改一个.java文件或者.jsp文件甚至是配置文件,不需要重启WEB服务器的前提下让修改生效,实现tomcat自动加 ...

  7. Eclipse web工程 部署 三种方式 2

    Eclipse web工程 部署 三种方式 2.插件 tomcat插件下载: http://www.eclipsetotale.com/tomcatPlugin.html 解压缩后, com.sysd ...

  8. Eclipse web工程 部署 三种方式 1

    Eclipse web工程 部署 三种方式 1.run on 前提: 安装 好 eclipse.jdk.tomcat 然后 新建一个 web工程 注意此处Default output folder 最 ...

  9. tomcat发布web项目的三种方式

    tomcat发布web项目的三种方式 方式一: 配置tomcat 安装目录下的conf/server.xml <Host name="loaclhost">标签里面添加 ...

随机推荐

  1. A Tour of Go Slices

    A slice points to an array of values and also includes a length. []T is a slice with elements of typ ...

  2. mongodb 在windows上安装为服务

    // mongo 也是先安装扩展 在安装为服务 首先 先下载mongodb的压缩包 解压(一个bin文件夹 三个文件) 在目录下 新建立一文件夹 mongodb 然后将解压的内容放进去 然后在mong ...

  3. 转HTMLTestRunner 生成测试报告

    1.HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展.它生成易于使用的 HTML 测试报告 1>下载HTMLTestRunner.py文件,地址为: h ...

  4. Fastjson反序列化泛型类型时候的一个问题

    import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.u ...

  5. ubuntu13.04 Thinkpad W520安装nvidia显卡驱动

    Ubuntu13.04 amd64 Thinkpad W520安装Nvidia显卡驱动 曾经在ubuntu11.10上成功安装Nvidia显卡驱动.但是自从机器(Thinkpad W520)更新到13 ...

  6. 分布式助手Zookeeper(三)

    分布式助手Zookeeper(三)博客分类: Zookeeper zookeeperapi操作zookeeper 本篇,散仙要介绍一下基于zookeeper的一些API的编程. 在此之前,我们先来熟悉 ...

  7. thickbox关闭子页后ajax局部刷新父页

    1. 首先注意需要调用thickbox的js <script type="text/javascript" src="<%=path%>/js/jque ...

  8. 对Jsp提交input标签空格和回车的处理

    今天做增加的时候发现一个问题,在js中去掉空格的时候如果这么写 var stage_name = document.getElementById("stage_name").val ...

  9. Linux运维工程师成长必经之路

    本路线图是从0基础开始,全方位由浅入深,按照多年Linux培训经验和优秀教学方法制定的学习思路和学习方法,路线图包括初级入门.中级进阶.高级提升和资深冲刺四个阶段,每阶段对应着不同优秀的课程和学习方法 ...

  10. [转]BeagleBone Black USB一线通(2)

    接上篇  BeagleBone Black USB 一线通(1) 三.网络与ssh终端 通过串口终端我们可以看到启动的过程,也能做一些交互操作,比如我们看到了网络接口的状况.其中的usb0已经在随板的 ...