webApi中参数传递
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中参数传递的更多相关文章
- WebApi中的参数传递
在WebApi开发过程中,遇到一些客户端参数格式传输错误,经常被问到参数如何传递的一些问题,因此就用这篇博客做一下总结,肯定其它地方呢也有类似的一些文章,但是我还是喜欢通过这种方式将自己的理解记录下来 ...
- .NET Core WebAPI post参数传递时后端的接收方式
.NET Core WebAPI post参数传递时后端的接收方式 实体类 dynamic动态类型 JObject参数 单值参数(字符串参数) A.前端Post请求代码 $.ajax({ url: & ...
- Autofac - MVC/WebApi中的应用
Autofac前面写了那么多篇, 其实就是为了今天这一篇, Autofac在MVC和WebApi中的应用. 一.目录结构 先看一下我的目录结构吧, 搭了个非常简单的架构, IOC(web), IBLL ...
- WebAPI中无法获取Session对象的解决办法
在MVC的WebApi中默认是没有开启Session会话支持的.需要在Global中重写Init方法来指定会话需要支持的类型 public override void Init() { PostAut ...
- webapi 中的本地登录
WebApi 身份验证方式 asp.net WebApi 中有三种身份验证方式 个人用户账户.用户可以在网站注册,也可以使用 google, facebook 等外部服务登录. 工作和学校账户.使用活 ...
- webapi 中使用 protobuf
相比json来说,好处是速度更快,带宽占用更小.其效果大致等于json+Gzip. 在webapi中使用protobuf的方法为: 引用nuget包 Install-Package protobuf- ...
- 【AspNetCore】【WebApi】扩展Webapi中的RouteConstraint中,让DateTime类型,支持时间格式化(DateTimeFormat)
扩展Webapi中的RouteConstraint中,让DateTime类型,支持时间格式化(DateTimeFormat) 一.背景 大家在使用WebApi时,会用到DateTime为参数,类似于这 ...
- 在asp.net WebAPI 中 使用Forms认证和ModelValidata(模型验证)
一.Forms认证 1.在webapi项目中启用Forms认证 Why:为什么要在WebAPI中使用Forms认证?因为其它项目使用的是Forms认证. What:什么是Forms认证?它在WebAP ...
- 在WebAPI中自动创建Controller
在MIS系统中,大部分的操作都是基本的CRUD,并且这样的Controller非常多. 为了复用代码,我们常常写一个泛型的基类. public class EntityController<T& ...
随机推荐
- Ubuntu 12.04 下安装 VirtualBox 及虚拟机winxp的安装
参考文档: http://wenku.baidu.com/view/a51ac26c9b6648d7c1c746d7.html 1.首先,先去官网(http://www.virtualbox.org) ...
- Struts1与Struts2的12点区别
Struts1与Struts2的12点区别 1) 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类:Struts 1的一个具体问题是使用抽象类编程而不是接口.Str ...
- rbegin 和 end 区别
在使用C++的STL时,经常会用到迭代器,那么不得不搞清楚里面的一些指针 begin(), end(), rbegin(), rend()之间的区别与联系,以及它们分别都指向哪个元素.首先要明白的一点 ...
- OpenCV 2.4.11 VS2012 Configuration
Add in the system Path: C:\opencv\build\x86\vc11\bin; Project->Project Property->Configuration ...
- MySQL中的datetime与timestamp比较-------转载
原文地址http://database.51cto.com/art/200905/124240.htm MySQL中的datetime与timestamp比较 本文将通过实例比较MySQL中的date ...
- 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 ...
- shenyi 语录
[讲师]沈逸(65480539) 2016-06-08 14:58:42 会centos 转redhat是分分钟的事 [讲师]沈逸(65480539) 2016-06-08 14:58:54 查看 ...
- 客户端显示Not yet reported
No.1: IIS, WSUS, 加域的顺序,不过貌似关系不大,按照这个顺序就行了. No.2: KB2734608, KB2720211的影响,3.2.7600.256 (KB2734608), ...
- #在FLAT模式下,需要设置flat子网,VM的IP从这个设置的子网中抓取,这时flat_injected需要设置为True,系统才能自动获得IP,如果flat
#在FLAT模式下,需要设置flat子网,VM的IP从这个设置的子网中抓取,这时flat_injected需要设置为True,系统才能自动获得IP,如果flat子网和主机网络是同一网络,网络管理员要注 ...
- 校内OJ 1128 词链(link)(Trie+DFS)
1128: 词链(link) 时间限制: 1 Sec 内存限制: 64 MB 提交: 23 解决: 7 [提交][状态][讨论版] 题目描述 给定一个仅包含小写字母的英文单词表,其中每个单词最多包 ...