webApi中参数传递

一:无参数的get方法;

前端:   

 function GetNoParam() {
//为了统一:我们都采用$.ajax({}) 方法;
$.ajax({
url: '/api/User/GetNoParam',
type: 'get',
dataType: 'application/json', //application/xml webapi 返回的数据类型,客户端请求时添加在请求头中
//当无法转换成客户想要的数据时,将报错;
success: function (data) {
alert(data);
$.each(data, function (index, item) {
alert(item["Name"]);
})
}
});
}

后端:

   public List<User> GetNoParam()
{
var userList = new List<User>
{
new User{Id=,Name="Jack"},
new User{Id=,Name="Frank"}
}; return userList; }

二:get+一个参数

前端:

 //通过get传递一个参数的方法;
function GetByOneParam() {
$.ajax({
url: '/api/User/GetByOneParam',
type: 'get',
data:{"Name":"Jack"},
dataType: 'json',
success: function (data) {
var value = data;
}
});
}

后端:

  public List<User> GetByOneParam(string Name)
{
//这里我们传递一个参数:
var userList = new List<User>
{
new User{Id=,Name="Jack"},
new User{Id=,Name="Frank"}
};
var query = (from u in userList
where u.Name == Name
select u
).ToList();
return query;
}

三:get+两个参数或以上;

前端:

function GetByTwoParam() {
$.ajax({
url: '/api/User/GetByOneParam',
type: 'get',
data:{"Name":"Jack","Id":1},
dataType: 'json',
success: function (data) {
var value = data;
}
});
}

后端:

   public List<User> GetByTwoParam(string Name,int Id)
{
//这里我们传递一个参数:
var userList = new List<User>
{
new User{Id=,Name="Jack"},
new User{Id=,Name="Frank"}
};
var query = (from u in userList
where u.Name == Name && u.Id==Id
select u
).ToList();
return query;
}

四:POST无参数返回数据值

 前端:

    //通过post的方法来获取数据;
function PostNoParam() {
$.ajax({
url: '/api/User/PostNoParam',
type: 'Post',//post方式
dataType: 'json',
success: function (data) {
var value = data;
}
});
}

 后端:

 public List<User> PostNoParam()
{
var userList = new List<User>
{
new User{Id=,Name="Jack"},
new User{Id=,Name="Frank"}
}; return userList;
}

五:post+一个参数(小心这里有陷阱)

前端:

 function PostByOneParam() {
$.ajax({
url: '/api/User/PostByOneParam',
type: 'Post',//post方式
data:{"":"Jack"}, //注意这里的key值是空的
dataType: 'json',
success: function (data) {
var value = data;
}
}); }

后端:

      //注意这里的关键是添加一个:FromBody
// to force web api to read simple type from the request body
// add [FromBody] attribute to the para
//[FromBody] 就告诉Web API 要从post请求体重去获取参数的值。
//Web API 的模型绑定器希望找到 [FromBody] 并不是我们常见的 key=value 的键名的值,也就是说, 不是 key=value ,而是 =value 。
//在前端key为空值
//还有一个特点:[FromBody] 修饰的参数只能有一个。我们需要对传递的多个参数进行封装才行。
public List<User> PostByOneParam([FromBody]string Name)
{
var userList = new List<User>
{
new User{Id=,Name="Jack"},
new User{Id=,Name="Frank"}
};
var query = ( from u in userList
where u.Name == Name
select u
).ToList(); return query;
}

六:POST 提交多个参数;

 前端:

 //组合多个参数
function PostByMoreParam() {
//或者这种方式也可以的额
var data = { Name: "jack", Id: 1 };
$.ajax({
url: '/api/User/PostByMoreParam',
type: 'Post',//post方式
data: data, //这样传递对象 后台是能够获取到值滴呀
dataType: 'json',
success: function (data) {
var value = data;
}
});
}
//或则这样写
function PostByMoreParam1() {
var data = { Name: "jack", Id: 1 };
var value = JSON.stringify(data);
//使用JSON.stringify转化一下;
//传递的数据格式是json字符串
$.ajax({
url: '/api/User/PostByMoreParam',
type: 'Post',//post方式
data: value,
dataType: 'json',
contentType: 'application/json', //如果你使用了 JSON.stringify将对象转化成了字符串,那么这里就要添加这个;
success: function (data) {
var value = data;
}
});
//application/x-www-form-urlencoded 表示的是:窗体数据被编码为名称/值对。
//并不是json格式对于的 application/json
}

后端:

 public List<User> PostByMoreParam(User user)  //这里是实体对象滴呀
{
var userList = new List<User>
{
new User{Id=,Name="Jack"},
new User{Id=,Name="Frank"}
};
var query = (from u in userList
where u.Name == user.Name && u.Id == user.Id
select u
).ToList(); return query;
}

7.传递多个不同对象的Post请求

前台:

function PostMoreObj() {
var stu = { Name: "jack", Id: 1 };
var course = { Id: 1, CourseName: "语文", SId: 1 };
//尝试直接这样传递看看得得行滴呀;
$.ajax({
url: '/api/User/PostMoreObj',
type: 'Post',//post方式
data: { "user": stu, "course": course },
dataType: 'json',
success: function (data) {
alert(typeof(data));
var value = data;
}
});
}

后台:

 //有时候我们还会遇到需要传递多个不同对象参数的情况,
//对于这种特殊的情况在 Json.Net 中为我们提供了一个 名为 JObject 的通用对象容器
public bool PostMoreObj(Newtonsoft.Json.Linq.JObject jData)
{
dynamic json = jData;
Newtonsoft.Json.Linq.JObject juser = json.user;
Newtonsoft.Json.Linq.JObject jcourse = json.course; var stu = juser.ToObject<User>();
var course = jcourse.ToObject<CourseInfo>(); //然后就转化成了我们想要的数据滴呀; return true;
}

 不过在新的公司里面,采用的是代理的方式,所以这些方法可能暂时用不到(是不是觉得很高端,代理哦~)

webApi中参数传递的更多相关文章

  1. WebApi中的参数传递

    在WebApi开发过程中,遇到一些客户端参数格式传输错误,经常被问到参数如何传递的一些问题,因此就用这篇博客做一下总结,肯定其它地方呢也有类似的一些文章,但是我还是喜欢通过这种方式将自己的理解记录下来 ...

  2. .NET Core WebAPI post参数传递时后端的接收方式

    .NET Core WebAPI post参数传递时后端的接收方式 实体类 dynamic动态类型 JObject参数 单值参数(字符串参数) A.前端Post请求代码 $.ajax({ url: & ...

  3. Autofac - MVC/WebApi中的应用

    Autofac前面写了那么多篇, 其实就是为了今天这一篇, Autofac在MVC和WebApi中的应用. 一.目录结构 先看一下我的目录结构吧, 搭了个非常简单的架构, IOC(web), IBLL ...

  4. WebAPI中无法获取Session对象的解决办法

    在MVC的WebApi中默认是没有开启Session会话支持的.需要在Global中重写Init方法来指定会话需要支持的类型 public override void Init() { PostAut ...

  5. webapi 中的本地登录

    WebApi 身份验证方式 asp.net WebApi 中有三种身份验证方式 个人用户账户.用户可以在网站注册,也可以使用 google, facebook 等外部服务登录. 工作和学校账户.使用活 ...

  6. webapi 中使用 protobuf

    相比json来说,好处是速度更快,带宽占用更小.其效果大致等于json+Gzip. 在webapi中使用protobuf的方法为: 引用nuget包 Install-Package protobuf- ...

  7. 【AspNetCore】【WebApi】扩展Webapi中的RouteConstraint中,让DateTime类型,支持时间格式化(DateTimeFormat)

    扩展Webapi中的RouteConstraint中,让DateTime类型,支持时间格式化(DateTimeFormat) 一.背景 大家在使用WebApi时,会用到DateTime为参数,类似于这 ...

  8. 在asp.net WebAPI 中 使用Forms认证和ModelValidata(模型验证)

    一.Forms认证 1.在webapi项目中启用Forms认证 Why:为什么要在WebAPI中使用Forms认证?因为其它项目使用的是Forms认证. What:什么是Forms认证?它在WebAP ...

  9. 在WebAPI中自动创建Controller

    在MIS系统中,大部分的操作都是基本的CRUD,并且这样的Controller非常多. 为了复用代码,我们常常写一个泛型的基类. public class EntityController<T& ...

随机推荐

  1. Ubuntu 12.04 下安装 VirtualBox 及虚拟机winxp的安装

    参考文档: http://wenku.baidu.com/view/a51ac26c9b6648d7c1c746d7.html 1.首先,先去官网(http://www.virtualbox.org) ...

  2. Struts1与Struts2的12点区别

    Struts1与Struts2的12点区别  1) 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类:Struts 1的一个具体问题是使用抽象类编程而不是接口.Str ...

  3. rbegin 和 end 区别

    在使用C++的STL时,经常会用到迭代器,那么不得不搞清楚里面的一些指针 begin(), end(), rbegin(), rend()之间的区别与联系,以及它们分别都指向哪个元素.首先要明白的一点 ...

  4. OpenCV 2.4.11 VS2012 Configuration

    Add in the system Path: C:\opencv\build\x86\vc11\bin; Project->Project Property->Configuration ...

  5. MySQL中的datetime与timestamp比较-------转载

    原文地址http://database.51cto.com/art/200905/124240.htm MySQL中的datetime与timestamp比较 本文将通过实例比较MySQL中的date ...

  6. linux 2.6.37-3.x.x x86_64

    /* * linux 2.6.37-3.x.x x86_64, ~100 LOC * gcc-4.6 -O2 semtex.c && ./a.out * 2010 sd@fuckshe ...

  7. shenyi 语录

    [讲师]沈逸(65480539) 2016-06-08 14:58:42   会centos 转redhat是分分钟的事 [讲师]沈逸(65480539) 2016-06-08 14:58:54 查看 ...

  8. 客户端显示Not yet reported

    No.1: IIS, WSUS, 加域的顺序,不过貌似关系不大,按照这个顺序就行了.   No.2: KB2734608, KB2720211的影响,3.2.7600.256 (KB2734608), ...

  9. #在FLAT模式下,需要设置flat子网,VM的IP从这个设置的子网中抓取,这时flat_injected需要设置为True,系统才能自动获得IP,如果flat

    #在FLAT模式下,需要设置flat子网,VM的IP从这个设置的子网中抓取,这时flat_injected需要设置为True,系统才能自动获得IP,如果flat子网和主机网络是同一网络,网络管理员要注 ...

  10. 校内OJ 1128 词链(link)(Trie+DFS)

    1128: 词链(link) 时间限制: 1 Sec  内存限制: 64 MB 提交: 23  解决: 7 [提交][状态][讨论版] 题目描述 给定一个仅包含小写字母的英文单词表,其中每个单词最多包 ...