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传值的更多相关文章

  1. Entity Framework 6 Recipes 2nd Edition(9-3)译->找出Web API中发生了什么变化

    9-3. 找出Web API中发生了什么变化 问题 想通过基于REST的Web API服务对数据库进行插入,删除和修改对象图,而不必为每个实体类编写单独的更新方法. 此外, 用EF6的Code Fri ...

  2. ASP.NET Web API中的Controller

    虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是ASP.NET Web API框架本身只要 ...

  3. Web APi 2.0优点和特点?在Web APi中如何启动Session状态?

    前言 曾几何时,微软基于Web服务技术给出最流行的基于XML且以扩展名为.asmx结尾的Web Service,此服务在.NET Framework中风靡一时同时也被.NET业界同仁所青睐,几年后在此 ...

  4. 在ASP.NET Web API中使用OData

    http://www.alixixi.com/program/a/2015063094986.shtml 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在A ...

  5. WEB API 中HTTP的get、post、put,delete 请求方式

    一.WEB API 中HTTP 请求方式的四个主要方法 (GET, PUT, POST, DELETE), 按照下列方式映射为 CURD 操作: 1.POST 用于新建资源,服务端在指定的URI 上创 ...

  6. 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【五】——在Web Api中实现Http方法(Put,Post,Delete)

    系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 在Web Api中,我们对资源的CRUD操作都是通过相应的Http方法来实现——Post(新 ...

  7. ASP.NET Web API 中的异常处理(转载)

    转载地址:ASP.NET Web API 中的异常处理

  8. Web Api 中Get 和 Post 请求的多种情况分析

    转自:http://www.cnblogs.com/babycool/p/3922738.html 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用J ...

  9. Web Api 中返回JSON的正确做法

    在使用Web Api的时候,有时候只想返回JSON:实现这一功能有多种方法,本文提供两种方式,一种传统的,一种作者认为是正确的方法. JSON in Web API – the formatter b ...

随机推荐

  1. 虚拟化平台cloudstack(6)——使用maven:jetty调试

    调试环境 ubuntu 12.04 JDK1.7 apache-maven-3.10 eclipse 4.2 Juno mysql 5 apache ant JDK的配置和安装 安装可以参考: htt ...

  2. Java中反射的理解

    反射 一.什么是反射 Java 反射是Java语言的一个很重要的特征,它使得Java具体了"动态性". 反射用在 Java 身上指的是我们可以于运行时加载.探知.使用编译期间完全未 ...

  3. Mybatis入门例子

    Mybatis是轻量级的持久化框架,的确上手非常快. Mybatis大体上的思路就是由一个总的config文件配置全局的信息,比如mysql连接信息等.然后再mapper中指定查询的sql,以及参数和 ...

  4. salesforce 零基础学习(三十八)Translate 的使用(国际化处理)

    本篇参考:http://resources.docs.salesforce.com/200/17/en-us/sfdc/pdf/salesforce_workbench_cheatsheet.pdf ...

  5. 理解与模拟一个简单web服务器

    先简单说下几个概念,根据自己的理解,不正确请见谅. web服务器 首先要知道什么是web服务器,简单说web服务器就是可以使用HTTP传输协议与客户端进行通信的服务器.最初的web服务器只能用来处理静 ...

  6. Enterprise Solution 界面设计规范

    Enteprise Solution有一套自己的界面设计规范,也是很多年(10年以上)管理软件界面精华的积累.没有一个软件从一开始就很善于界面设计,许多个小小的改善,比如控件位置的移动,控件摆放顺序的 ...

  7. CSS实现水平垂直同时居中的5种思路

    × 目录 [1]水平对齐+行高 [2]水平+垂直对齐 [3]margin+垂直对齐[4]absolute[5]flex 前面的话 水平居中和垂直居中已经单独介绍过,本文将介绍水平垂直同时居中的5种思路 ...

  8. HttpClient post json,可以是数组

    var json = JsonConvert.SerializeObject(obj); StringContent theContent = new StringContent(json, Enco ...

  9. Request 接收参数乱码原理解析一:服务器端解码原理

    “Server.UrlDecode(Server.UrlEncode("北京")) == “北京””,先用UrlEncode编码然后用UrlDecode解码,这条语句永远为true ...

  10. Kubernetes系统架构简介--转

    原文地址:http://www.infoq.com/cn/articles/Kubernetes-system-architecture-introduction?utm_campaign=infoq ...