Web Api中的get传值和post传值
GET 方式
get方式传参 我们一般用于获取数据做条件筛选,也就是 “查”
1.无参

var look = function () {
$.ajax({
type: "GET",
url: "http://172.28.20.106:8002/api/products/",
dataType: "xml",
contentType: 'application/xml;charset=gb2312;'
}).success(function (res) {
console.log(res);
}).error(function (xhr, status) {
console.log(xhr);
});
}

2.一个参数

var look = function () {
$.ajax({
type: "GET",
url: "http://172.28.20.106:8002/api/users/",
data:{"id":2},
dataType: "xml",
contentType: 'application/xml;charset=gb2312;'
}).success(function (res) {
console.log(res);
}).error(function (xhr, status) {
console.log(xhr);
});
}
后台控制器方法如下:
// GET api/users/5
public string Get(int id)
{
return "id:"+id;
}
当然,也可以这样 把参数放在url

var look = function () {
$.ajax({
type: "GET",
url: "http://172.28.20.106:8002/api/users/2",
dataType: "xml",
contentType: 'application/xml;charset=gb2312;'
}).success(function (res) {
console.log(res);
}).error(function (xhr, status) {
console.log(xhr);
});
}
输出:<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">id:2</string>

3.多个简单参数
后台方法体如下:
// GET api/users/5
public string Get(int id,string name)
{
return "id:" + id+" name:"+name;
}
多个参数时也比较简单 指明参数就行了

var look = function () {
$.ajax({
type: "GET",
url: "http://172.28.20.106:8002/api/users",
data:{"id":2,"name":"张飞"},
dataType: "json",
contentType: 'application/json;charset=gb2312;'
}).success(function (res) {
console.log(res);
}).error(function (xhr, status) {
console.log(xhr);
});
}
输出:"id:1 name:张飞"

4.传递一个对象
后台方法如下:
[Route("Manger")]
public string Get( Product model)
{
return "id:" + model.Id + " name:" + model.Name;
}
大家可能注意到这个方法上面有个标记了,这个其实是自定义路由,针对重载方法,防止出现匹配到多个适配的方法而报错
这里必须要着重说明下,传递对象并不是理所当然的构造一个对象传过去就可以了

var look = function () {
var Product = {
Id: 1,
Name: "张飞",
Category:"212",
Price:22
};
$.ajax({
type: "GET",
url: "http://172.28.20.106:8002/api/users/Manger",
//data:{ "model":{"Id":2,"Name":"张飞","Category":"22","Price":22}},
data: Product ,
dataType: "json",
contentType: 'application/json;charset=gb2312;'
}).success(function (res) {
console.log(res);
}).error(function (xhr, status) {
console.log(xhr);
});
}
这2种情况都会报错
经过多次试验发现,后台方法参数列表内加入
[FromUri]关键字就可以了
加入后的方法如下

[Route("Manger")]
public string Get([FromUri] Product model)
{
return "id:" + model.Id + " name:" + model.Name;
}
输出:"id:1 name:张飞"

POST方式
post方式我们一般用来做增 删 改 ,不过在web api中post仅仅用来做增加操作 修改用put 删除用delete
可以看看模板给我们生成的东西

// PUT api/users/5
public string Put(int id, [FromBody]string value)
{
return "id:" + id + "value:" + value;
} // DELETE api/users/5
public void Delete(int id)
{
}

1.post的一个参数
注意:post 提交必须使用
[FromBody]关键字,并且参数列表里面只能有一个关键字,多个无效
// POST api/users
[Route("addid")]
public string Post([FromBody]string value)
{
return "值是:" + value;
}
惯性思维,然后我们的前台会写成这个样子

$.ajax({
type: "POST",
url: "http://172.28.20.106:8002/api/users/addid",
data: {"value":"1"}
}).success(function (res) {
console.log(res);
}).error(function (xhr, status) {
console.log(xhr);
});

结果输出却发现 值是:"
后台并没有收到数据
总结:
当只有一个参数时,有2种方式是可以获取到值的
1. data: {"":"1"} //忽略参数名
2. data: "=1" //加上”=“号 并且去掉花括号

$.ajax({
type: "POST",
url: "http://172.28.20.106:8002/api/users/addid",
data: {"":"1"}
}).success(function (res) {
console.log(res);
}).error(function (xhr, status) {
console.log(xhr);
});


$.ajax({
type: "POST",
url: "http://172.28.20.106:8002/api/users/addid",
data: "=1"
}).success(function (res) {
console.log(res);
}).error(function (xhr, status) {
console.log(xhr);
});

输出:"值是:1"


2.post的多个参数(1个对象)
注意:post并不能提交多个参数,只能合并成对象
错误写法:

public string Post(int id,string name)
{
return "id是:" + id+" name:"+name;
}
public string Post(int id,[FromBody] string name)
{
return "id是:" + id+" name:"+name;
}
正确写法:
[Route("addmodel")]
public string Post([FromBody] Product value)
{
return "值是:" + value.Id+" name :"+value.Name;
}
前台调用:

var Product = {
Id: 1,
Name: "张飞",
Category: "212",
Price: 22
};
$.ajax({
type: "POST",
url: "http://172.28.20.106:8002/api/users/addmodel",
data: Product
}).success(function (res) {
console.log(res);
}).error(function (xhr, status) {
console.log(xhr);
});

输出: "值是:1 name :张飞"
3.post的多个参数(多个对象)
如果有多个对象,那就只能把它封装在一个扩展对象里面了

public class User
{
public int ID { get; set; }
public int Name { get; set; }
} public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
} //实体扩展类
public class NewProduct
{
public User user { get; set; }
public Product product { get; set; }
}

接下来就以扩展类为参数,后台代码变成这样
[Route("addnewmodel")]
public string Post([FromBody] NewProduct value)
{
return "userid值是:" + value.user.ID + " priduct值是 :" + value.product.Name;
}
接下来就是前台调用

var Product = {
Id: 1,
Name: "手机",
Category: "212",
Price: 22
};
var User = {
Id: 1,
Name: "张飞",
};
$.ajax({
type: "POST",
url: "http://172.28.20.106:8002/api/users/addnewmodel",
data: { Product: Product ,User:User}
}).success(function (res) {
console.log(res);
}).error(function (xhr, status) {
console.log(xhr);
});

输出: "userid值是:1 priduct值是 :手机"
也可以写成这样

$.ajax({
type: "POST",
url: "http://172.28.20.106:8002/api/users/addnewmodel",
data: {
Product: { Id: 1, Name: "手机", Category: "212", Price: 22 }, User: { Id: 1, Name: "张飞", }
}
}).success(function (res) {
console.log(res);
}).error(function (xhr, status) {
console.log(xhr);
});

自定义路由
额外的提一下,由于我代码中大量用到它,还是介绍一下
使用场景:用于方法重载 忽略方法名 自定义url(更好看点) 使用步骤:
1.在控制器类上方加入一个标记
[RoutePrefix("api/users")]
public class UsersController : ApiController
{
}
里面的内容可以根据自己的喜好来定义
2.在方法中加入路由标记[Route("Manger")]
[Route("Manger")]
public string Get([FromUri] Product model)
{
return "id:" + model.Id + " name:" + model.Name+" price:"+model.Price;
}
这样再访问时就可以使用
api/users/Manger
注意:如果想实现第2步,必须先实现第一步,不然会报错
Web Api中的get传值和post传值的更多相关文章
- Entity Framework 6 Recipes 2nd Edition(9-3)译->找出Web API中发生了什么变化
9-3. 找出Web API中发生了什么变化 问题 想通过基于REST的Web API服务对数据库进行插入,删除和修改对象图,而不必为每个实体类编写单独的更新方法. 此外, 用EF6的Code Fri ...
- ASP.NET Web API中的Controller
虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是ASP.NET Web API框架本身只要 ...
- Web APi 2.0优点和特点?在Web APi中如何启动Session状态?
前言 曾几何时,微软基于Web服务技术给出最流行的基于XML且以扩展名为.asmx结尾的Web Service,此服务在.NET Framework中风靡一时同时也被.NET业界同仁所青睐,几年后在此 ...
- 在ASP.NET Web API中使用OData
http://www.alixixi.com/program/a/2015063094986.shtml 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在A ...
- WEB API 中HTTP的get、post、put,delete 请求方式
一.WEB API 中HTTP 请求方式的四个主要方法 (GET, PUT, POST, DELETE), 按照下列方式映射为 CURD 操作: 1.POST 用于新建资源,服务端在指定的URI 上创 ...
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【五】——在Web Api中实现Http方法(Put,Post,Delete)
系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 在Web Api中,我们对资源的CRUD操作都是通过相应的Http方法来实现——Post(新 ...
- ASP.NET Web API 中的异常处理(转载)
转载地址:ASP.NET Web API 中的异常处理
- Web Api 中Get 和 Post 请求的多种情况分析
转自:http://www.cnblogs.com/babycool/p/3922738.html 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用J ...
- Web Api 中返回JSON的正确做法
在使用Web Api的时候,有时候只想返回JSON:实现这一功能有多种方法,本文提供两种方式,一种传统的,一种作者认为是正确的方法. JSON in Web API – the formatter b ...
随机推荐
- jni和java对应关系
Java 类型 本地类型 描述 boolean jboolean C/C++8位整型 byte jbyte C/C++带符号的8位整型 char jchar C/C++无符号的16位整型 short ...
- EF架构~扩展一个分页处理大数据的方法
回到目录 最近总遇到大数据的问题,一次性处理几千万数据不实际,所以,我们需要对大数据进行分块处理,或者叫分页处理,我在EF架构里曾经写过类似的,那是在进行BulkInsert时,对大数据批量插入时候用 ...
- MyBatis学习总结(一)——MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- paip.java gui swt/jface 最佳实践
paip.java gui swt/jface 最佳实践 1. 工具:Eclipse +jigloo4 1 2. 安装插件: 1 1. IMPORT swt lib 2 2. 新建立窗体 2 3. 运 ...
- PHP两种redirect
PHP两种redirect redirect header('Location: /admin_data.php'); exit(); redirect `echo "<script& ...
- oracle11g AUD$维护
SYSTEM表空间使用率达到了85%,查出是用来记录审计记录的aud$表占用了很大的空间. 备份后truncate掉AUD$,问题临时解决.记得oracle11.2可以把aud$迁移到普通的表空 间. ...
- Html与CSS快速入门01-基础概念
Web前端技术一直是自己的薄弱环节,经常为了调节一个简单的样式花费大量的时间.最近趁着在做前端部分的开发,果断把这部分知识成体系的恶补一下.内容相对都比较简单,很类似工具手册的学习,但目标是熟练掌握. ...
- Vertex and Fragment Shader
Semantics语义词: 定义:GPU工作时,数据通常暂存在寄存器,那么在Cg中,语义词就指定了输入/输出数据和图形硬件寄存器之间的映射关系. 原理:根据输入语义,图形处理器从某个寄存器取数据:然后 ...
- Representation Data in OpenCascade BRep
Representation Data in OpenCascade BRep eryar@163.com 摘要Abstract:现在的显示器大多数是光栅显示器,即可以看做一个像素的矩阵.在光栅显示器 ...
- CSS清浮动
× 目录 [1]定义 [2]方法 [3]兼容 前面的话 人们经常谈起清浮动,其实就是解决浮动元素的包含块高度塌陷的问题 定义 clear 清除 值: left | right | both | non ...