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 ...
随机推荐
- JavaScript 数组详解
在程序语言中数组的重要性不言而喻,JavaScript中数组也是最常使用的对象之一,数组是值的有序集合,由于弱类型的原因,JavaScript中数组十分灵活.强大,不像是Java等强类型高级语言数组只 ...
- Lucene系列-搜索
Lucene搜索的时候就要构造查询语句,本篇就介绍下各种Query.IndexSearcher是搜索主类,提供的常用查询接口有: TopDocs search(Query query, int n); ...
- 开启Ubuntu root 远程登录
很早就遇到这问题了,但是今天才想到解决.也就是说Ubuntu在安装的时候,远程SSH登录是禁止的.每次你必须使用普通的用户SSH远程登录以后,然后su切换到root这样,对于强迫症的我实在是很难容忍的 ...
- java.rmi.NoSuchObjectException: no such object in table
jmx链接的时候,最简单的例子都行不通,郁闷,出现了: 参考:http://reiz6153.blog.163.com/blog/static/401089152009442723208/ 代码: M ...
- Atitti css transition Animation differ区别
Atitti css transition Animation differ区别 1.1. transition的优点在于简单易用,但是它有几个很大的局限. 1 1.2. Transition ...
- ui-router API
ui-router API 英文不咋地感觉找个API都要找半天, 拿好不谢 http://angular-ui.github.io/ui-router/site/#/api/ui.router
- LigerUI学习使用
LigerUI有如下主要特点: 使用简单,轻量级 控件实用性强,功能覆盖面大,可以解决大部分企业信息应用的设计场景 快速开发,使用LigerUI可以比传统开发减少极大的代码量 易扩展,包括默认参数.表 ...
- 浅谈Winform事件的实现以及模拟其事件的实现(附实现源码)
当我们初学Winform的时候被其神奇的事件功能所吸引,当点击一个按钮时,便会跳到我们所写的点击方法当中去.然而这并不符合我们对方法的理解,究竟.net在后面帮助我们实现了什么.我们怎样模拟其事件的实 ...
- 各浏览器Iframe对contentWindow、contentDocument、document及frames属性测试
Iframe易于嵌套及管理页面,但经常遇到跨域.父子页面访问问题,对于子页面访问父页面可以兼容性地通过window.Top或window.Parent或window.frameElement等操作,但 ...
- ZooKeeper官方文档翻译——ZooKeeper Overview 3.4.6
ZooKeeper ZooKeeper: A Distributed Coordination Service for Distributed Applications (针对分布式应用的分布式调度服 ...