博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web Api中的get传值和post传值
阅读量:5333 次
发布时间:2019-06-15

本文共 6188 字,大约阅读时间需要 20 分钟。

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步,必须先实现第一步,不然会报错

转载于:https://www.cnblogs.com/csl0910/p/4949901.html

你可能感兴趣的文章
shell cat 合并文件,合并数据库sql文件
查看>>
构建自己的项目管理方案
查看>>
安装Endnote X6,但Word插件显示的总是Endnote Web"解决办法
查看>>
python全栈 计算机硬件管理 —— 硬件
查看>>
Delphi7编译的程序自动中Win32.Induc.a病毒的解决办法
查看>>
各种正则验证
查看>>
python中numpy.r_和numpy.c_
查看>>
egret3D与2D混合开发,画布尺寸不一致的问题
查看>>
freebsd 实现 tab 命令 补全 命令 提示
查看>>
struts1和struts2的区别
查看>>
Redis常用命令
查看>>
2018.11.06 bzoj1040: [ZJOI2008]骑士(树形dp)
查看>>
2019.02.15 bzoj5210: 最大连通子块和(链分治+ddp)
查看>>
redis cluster 集群资料
查看>>
微软职位内部推荐-Sr. SE - Office incubation
查看>>
C#类与结构体究竟谁快——各种函数调用模式速度评测
查看>>
我到底要选择一种什么样的生活方式,度过这一辈子呢:人生自由与职业发展方向(下)...
查看>>
poj 题目分类
查看>>
windows 安装yaml支持和pytest支持等
查看>>
读书笔记:季羡林关于如何做研究学问的心得
查看>>