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& ...
随机推荐
- Django 1.6.0 正式发布,大幅改进事务处理
Django 1.6.0 正式发布了,查看官方发行说明. 下载地址:Django-1.6.tar.gz ,也可通过 pip 安装: pip install Django==1.6 要求 Python ...
- 微课程--Android--基础控件的使用
view viewgroup是一种特殊的view,里面可以包含其他的view 如何生成view: 1 在代码里动态生成 2 写在XML里面 view的常见属性--宽度 wrap_content 随着内 ...
- lightning mdb 源代码分析系列(3)
本系列前两章已经描述了系统架构以及系统构建的基础内存映射,本章将详细描述lmdb的核心,外存B+Tree的操作.本文将从基本原理.内存操作方式.外存操作方式以及LMDB中的相关函数等几方面描述LMDB ...
- SparkContext.setCheckpointDir()
class SparkContext extends Logging with ExecutorAllocationClient Main entry point for Spark function ...
- hdu Robberies
这道题目应该在理解上会有一点问题.这道题的概率不是用来加的,而是用来乘的.这道题要的是在能逃跑的前提下,获得的最大money,而题目中给的概率是被抓的概率,所以要先有一个预处理,之后只要列出状态转移方 ...
- php任何优化的方式下这样第个列表都是再次查询
我们的代码经理是这样的:计算总行数:select count(*) from tablename where -..查询列表select * from tablename where - limit- ...
- 从网页上抓取Windows补丁信息然后整型输出(PowerShell)
$report = [pscustomobject]@{'Date' = $null; 'MSRC' = $null; 'KB' = $null; 'Severity' = $null; 'Versi ...
- 3DMark Sky Driver
Futuremark今天宣布,3DMark Sky Diver测试场景已经正式发布,现有用户可以免费更新. 3DMark的十几年历史上,这是第一次为某个版本增加全新的测试场景.升级后的3DMark版本 ...
- tunnel.p4
Tunneling: VXLAN and NVGRE (including L2/L3 Gateway), Geneve, GRE and IPinIP /* Copyright 2013-prese ...
- etcdctl --help
NAME: etcdctl - A simple command line client for etcd. USAGE: etcdctl [global options] command [ ...