ajax GET和POST请求web api 的几种方式
GET请求
1.无参数get请求
一般get请求有两种写法,一种是 $.get() 一种是$.ajax({type:"get"}), 我个人比较喜欢用后者。
下面例子主要是get无参数请求,获取人员列表并将数据返回到前台,并将返回的json数据转换成字符串弹出,以便知道是否请求成功,并且返回的数据是否正确
1 $.ajax({
2 url: "/api/Person/getList",
3 type: "get",
4 success: function (data) {
5 alert(JSON.stringify(data));
6 alert("成功");
7 },
8 error: function () {
9 alert("错误");
10 }
11 });
后台代码
1 public class PersonController : ApiController
2 {
3
4 public List<Person> getList()
5 {
6 var PersonList = new List<Person>(){
7 new Person{Name="张和",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"},
8 new Person{Name="张丽",Sex="女",Duty="工程师",CompanyName="北京XX科技有限公司"},
9 new Person{Name="张春雷",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"}
10 };
11 return PersonList;
12 }
13 }
2.多个参数的Get请求,参数格式:data:{},例如 一个参数的get请求是data:{ " Name": " 张丽 " },两个参数:data:{ " Name ": " 张丽 ","Sex":"女" },多个参数只是在{}里加入多个参数而已。
1 $.ajax({
2 url: "/api/Person/GetPerson",
3 type: "get",
4 data:{"Name":"张丽","Sex":"女"},
5 success: function (data) {
6 alert(data.Name+" "+data.Duty+" "+data.CompanyName);
7 },
8 error: function () {
9 alert("错误");
10 }
11 });
后台代码
1 public Person GetPerson(string Name,string Sex)
2 {
3 var PersonList = new List<Person>(){
4 new Person{Name="张和",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"},
5 new Person{Name="张丽",Sex="女",Duty="工程师",CompanyName="北京XX科技有限公司"},
6 new Person{Name="张春雷",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"}
7 };
8 var p = PersonList.FirstOrDefault(f => f.Name == Name&&f.Sex==Sex);
9 return p;
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 $.ajax({
2 url: "/api/Person/Post_Person",
3 type: "post",
4 data:{"Name":"张丽"},
5 success: function (data) {
6 alert("成功");
7 alert(data);
8 alert(data.Name + " " + data.CompanyName);
9 },
10 error: function () {
11 alert("错误");
12 }
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 var Person = {
2 Name: "张丽",
3 Sex: "女",
4 Duty: "ddd",
5 }
6
7 $.ajax({
8 url: "/api/Person/Post_PersonObj",
9 type: "post",
10 data: Person,
11 success: function (data) {
12 alert("成功");
13 alert(data);
14 alert(data.Name + " " + data.CompanyName);
15 },
16 error: function (data) {
17 alert(data.responseText);
18 }
19 });
后台代码
1 [HttpPost]
2 public Person Post_PersonObj([FromBody]Person per)
3 {
4 var PersonList = new List<Person>(){
5 new Person{Name="张和",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"},
6 new Person{Name="张丽",Sex="女",Duty="工程师",CompanyName="北京XX科技有限公司"},
7 new Person{Name="张春雷",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"}
8 };
9 var p = PersonList.FirstOrDefault(f => f.Name == per.Name&&f.Sex==per.Sex);
10 return p;
11 }
ajax GET和POST请求web api 的几种方式的更多相关文章
- 【.Net】调用Web API的几种方式
引言 记录一下调用Web API的几种方式,以调用百度API为例. HttpWebRequest HttpWebRequest位于System.Net命名空间,是常用的调用Web API类库. str ...
- .Net Core使用HttpClient请求Web API注意事项
HttpClient 使用HttpClient可以很方便的请求Web API,但在使用时有一些需要注意的地方,不然会给你的程序带来毁灭性的问题. HttpClient是一个继承了IDisposable ...
- Struts2中访问web元素的四种方式
Struts2中访问web元素的四种方式如下: 通过ActionContext来访问Map类型的request.session.application对象. 通过实现RequestAware.Sess ...
- Tomcat中部署web应用的三种方式
Tomcat中部署web应用的三种方式(静态部署) 第一种,针对war或解压后的war,最为常用的是直接操作webapp目录,将完整的war包或者web应用直接放到webapp目录下.使用 ...
- 在Tomcat中部署web项目的三种方式
搬瓦工搭建SS教程 SSR免费节点:http://www.xiaokeli.me 在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Man ...
- #Eclipse web工程 部署 三种方式 3
Eclipse web工程 部署 三种方式 3.热部署 在Eclipse中,实现 修改一个.java文件或者.jsp文件甚至是配置文件,不需要重启WEB服务器的前提下让修改生效,实现tomcat自动加 ...
- Eclipse web工程 部署 三种方式 2
Eclipse web工程 部署 三种方式 2.插件 tomcat插件下载: http://www.eclipsetotale.com/tomcatPlugin.html 解压缩后, com.sysd ...
- Eclipse web工程 部署 三种方式 1
Eclipse web工程 部署 三种方式 1.run on 前提: 安装 好 eclipse.jdk.tomcat 然后 新建一个 web工程 注意此处Default output folder 最 ...
- tomcat发布web项目的三种方式
tomcat发布web项目的三种方式 方式一: 配置tomcat 安装目录下的conf/server.xml <Host name="loaclhost">标签里面添加 ...
随机推荐
- elasticsearch的基本用法
开始学习使用 elasticsearch, 把步骤记录在这里: 最大的特点: 1. 数据库的 database, 就是 index 2. 数据库的 table, 就是 tag 3. 不要使用bro ...
- Java实现文件的RSA和DES加密算法
根据密钥类型不同将现代密码技术分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密) 对称钥匙加密系统是加密和解密均采用同一把秘密钥匙,而且通信双方都必须获得这把钥匙,并保持钥匙的秘密 ...
- myeclipse中使用gradle开发项目
gradle可以直接使用maven的代码库,并且支持编程,可以说是maven的加强版.今天我们学习下,如何在MyEclipse下使用gradle开发项目.我们的开发环境:myeclipse 2015, ...
- sql 生成excel
1创建存储过程 create PROCEDURE [dbo].[UP_Export_Data_To_CSV] @Table NVARCHAR(), @Path NVARCHAR(), @Subfix ...
- android 的异步任务
/** * 异步任务的三个泛型参数: * 1.调用execute方法时传入的参数类型,输入参数 * 2.progressUpdate的方法入参 * 3.异步任务的返回结果类型 doInBackgrou ...
- Android Studio中Gradle使用详解
一)基本配置 build配置 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools. ...
- Linux内核分析:页回收导致的cpu load瞬间飙高的问题分析与思考--------------蘑菇街技术博客
http://mogu.io/156-156 摘要 本文一是为了讨论在Linux系统出现问题时我们能够借助哪些工具去协助分析,二是讨论出现问题时大致的可能点以及思路,三是希望能给应用层开发团队介绍一些 ...
- Mybatis特殊字符处理,Mybatis中xml文件特殊字符的处理
Mybatis特殊字符处理,Mybatis中xml文件特殊字符的处理 >>>>>>>>>>>>>>>>& ...
- 用 C# 如何判断数据库中是否存在一个值
选定一个列,比如用户编号列 //欲插入的用户编号string ll_userID="xxxxxxxx"; //查询此编号是否存在SqlCommand mycmd = new Sql ...
- 关于ContentProvider的批量操作
今天看公司代码,发现在批量插入通话记录和联系人的时候,用了一个 ArrayList<ContentProviderOperation> ops = new ArrayList<Con ...