MVC和WebApi 使用get和post 传递参数。
我们总结一下用js请求服务器的传参方法。
Get方式
Get主要是用来查询,一般分为无参,一个参数,多个参数,实体对象参数。
1、无参
- //Get没有参数
- var get_f1 = function() {
- $.ajax({
- type: "get",
- url: "/api/Demo",
- success: function(data, status) {
- if (status == "success") {
- $("#div_test").html(data);
- }
- }
- });
- }

//Get没有参数
var get_f1 = function() {
$.ajax({
type: "get",
url: "/api/Demo",
success: function(data, status) {
if (status == "success") {
$("#div_test").html(data);
}
}
});
}
2、一个参数
- //Get一个参数
- var get_f2 = function() {
- $.ajax({
- type: "get",
- url: "/api/Demo",
- data: { strQuery: JSON.stringify({ Id: "1", Name: "Jim", CreateTime: "1988-09-11" }) },
- contentType: "application/json",
- success: function(data, status) {
- if (status == "success") {
- $("#div_test").html(data);
- }
- }
- });
- }

//Get一个参数
var get_f2 = function() {
$.ajax({
type: "get",
url: "/api/Demo",
data: { strQuery: JSON.stringify({ Id: "1", Name: "Jim", CreateTime: "1988-09-11" }) },
contentType: "application/json",
success: function(data, status) {
if (status == "success") {
$("#div_test").html(data);
}
}
});
}
后台控制器方法
- /// <summary>
- /// 一个参数
- /// </summary>
- /// <param name="strQuery"></param>
- /// <returns></returns>
- [HttpGet]
- public string Get(string strQuery)
- {
- //一个参数的时候,如果前端是传过来的是字符串的json可以反序列化成对象。
- //TbCharging oData = Newtonsoft.Json.JsonConvert.DeserializeObject<TbCharging>(strQuery);
- //return String.Format("{0},{1},{2},{3}", oData.Id, oData.Name, oData.Des, oData.CreateTime.ToString("yyyy-MM-dd hh:mm:ss"));
- return "一个参数" + strQuery;
- }

/// <summary>
/// 一个参数
/// </summary>
/// <param name="strQuery"></param>
/// <returns></returns>
[HttpGet]
public string Get(string strQuery)
{
//一个参数的时候,如果前端是传过来的是字符串的json可以反序列化成对象。
//TbCharging oData = Newtonsoft.Json.JsonConvert.DeserializeObject<TbCharging>(strQuery);
//return String.Format("{0},{1},{2},{3}", oData.Id, oData.Name, oData.Des, oData.CreateTime.ToString("yyyy-MM-dd hh:mm:ss"));
return "一个参数" + strQuery;
}
备注:在Get方式的时候我们也可以把参数放在url,我这里为了前台写得统一些,全都放在data里面,感觉好看一点。
3、多个参数
- //Get多个参数
- var get_f3 = function() {
- $.ajax({
- type: "get",
- url: "/api/Demo",
- data: { Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
- success: function(data, status) {
- if (status == "success") {
- $("#div_test").html(data);
- }
- }
- });
- }

//Get多个参数
var get_f3 = function() {
$.ajax({
type: "get",
url: "/api/Demo",
data: { Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
success: function(data, status) {
if (status == "success") {
$("#div_test").html(data);
}
}
});
}
后台控制器方法
- /// <summary>
- /// 多个参数
- /// </summary>
- /// <param name="Id"></param>
- /// <param name="Name"></param>
- /// <param name="CreateTime"></param>
- /// <returns></returns>
- [HttpGet]
- public string Get(int Id, string Name, DateTime CreateTime)
- {
- return String.Format("多个参数,{0},{1},{2}", Id, Name, CreateTime.ToString("yyyy-MM-dd hh:mm:ss"));
- }

/// <summary>
/// 多个参数
/// </summary>
/// <param name="Id"></param>
/// <param name="Name"></param>
/// <param name="CreateTime"></param>
/// <returns></returns>
[HttpGet]
public string Get(int Id, string Name, DateTime CreateTime)
{
return String.Format("多个参数,{0},{1},{2}", Id, Name, CreateTime.ToString("yyyy-MM-dd hh:mm:ss"));
}
4、一个实体对象参数
- //Get实体对象作为参数
- var get_f4 = function() {
- $.ajax({
- type: "get",
- url: "/api/Demo/GetModel",
- data: { Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
- success: function(data, status) {
- if (status == "success") {
- $("#div_test").html(data);
- }
- }
- });
- }

//Get实体对象作为参数
var get_f4 = function() {
$.ajax({
type: "get",
url: "/api/Demo/GetModel",
data: { Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
success: function(data, status) {
if (status == "success") {
$("#div_test").html(data);
}
}
});
}
备注:到这里有没有发现多个参数和一个实体对象的请求方法是一样的,假如两个接收的方法都写在同一个控制器里面的话,路由是区分不出来要匹配那个方法处理,
所以要用自定义路由来区分,在WebApi里面改方法名字是没有用的。
后台控制器方法
- /// <summary>
- /// 一个实体对象参数
- /// </summary>
- /// <param name="oData"></param>
- /// <returns></returns>
- [HttpGet]
- [Route("GetModel")]
- public string Get([FromUri]TbCharging oData)
- {
- return String.Format("一个实体对象参数,{0},{1},{2},{3}", oData.Id, oData.Name, oData.Des, oData.CreateTime.ToString("yyyy-MM-dd hh:mm:ss"));
- }

/// <summary>
/// 一个实体对象参数
/// </summary>
/// <param name="oData"></param>
/// <returns></returns>
[HttpGet]
[Route("GetModel")]
public string Get([FromUri]TbCharging oData)
{
return String.Format("一个实体对象参数,{0},{1},{2},{3}", oData.Id, oData.Name, oData.Des, oData.CreateTime.ToString("yyyy-MM-dd hh:mm:ss"));
}
备注:在使用Get传递实体对象参数的时候要注意,因为Get方式的时候参数是写在url的,所以我们在后台用[FromBody]是拿不到实体参数的,需要写[FromUri]才行。
Post方式
Post方式我们一般用来做增、删、改操作。在WebApi中Post仅仅用来做增加操作,修改用Put,删除用Delete。这些在新建模板的时候就自动为我们生成了。
还有要提一下的是Post只能传递一个参数,如果需要多个参数的时候我们需要把它们合并成一个扩展对象,当做对象来传递。
- //Post一个参数
- var post_f1 = function() {
- $.ajax({
- type: "post",
- url: "/api/Demo",
- data: { "": "Jim" },
- //data: "=Jim", //两种写法,其他写法获取不到值
- success: function(data, status) {
- if (status == "success") {
- $("#div_test").html(data);
- }
- }
- });
- }

//Post一个参数
var post_f1 = function() {
$.ajax({
type: "post",
url: "/api/Demo",
data: { "": "Jim" },
//data: "=Jim", //两种写法,其他写法获取不到值
success: function(data, status) {
if (status == "success") {
$("#div_test").html(data);
}
}
});
}
- /// <summary>
- /// 一个参数
- /// </summary>
- /// <param name="name"></param>
- /// <returns></returns>
- public string Post([FromBody]string name)
- {
- return "一个参数," + name;
- }

/// <summary>
/// 一个参数
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public string Post([FromBody]string name)
{
return "一个参数," + name;
}
2、一个实体对象参数
- //Post一个对象(Post不能提交多个参数,只能将多个参数封装成一个对象)
- var post_f2 = function () {
- var postdata = { Id: "1", Name: "Jim", CreateTime: "1988-09-11" };
- $.ajax({
- type: "post",
- url: "/api/Demo/PostAdd",//多个post的时候,路由会匹配不到,所以要自定义路由
- //data: { Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
- data: postdata,
- success: function (data, status) {
- if (status == "success") {
- $("#div_test").html(data);
- }
- }
- });
- }

//Post一个对象(Post不能提交多个参数,只能将多个参数封装成一个对象)
var post_f2 = function () {
var postdata = { Id: "1", Name: "Jim", CreateTime: "1988-09-11" };
$.ajax({
type: "post",
url: "/api/Demo/PostAdd",//多个post的时候,路由会匹配不到,所以要自定义路由
//data: { Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
data: postdata,
success: function (data, status) {
if (status == "success") {
$("#div_test").html(data);
}
}
});
}
后台控制器方法
- /// <summary>
- /// 一个对象
- /// </summary>
- /// <param name="oData"></param>
- /// <returns></returns>
- [HttpPost]
- [Route("PostAdd")]
- public object Post([FromBody]TbCharging oData)
- {
- var strName = String.Format("一个对象,{0},{1}", oData.Id, oData.Name);
- return strName;
- }

/// <summary>
/// 一个对象
/// </summary>
/// <param name="oData"></param>
/// <returns></returns>
[HttpPost]
[Route("PostAdd")]
public object Post([FromBody]TbCharging oData)
{
var strName = String.Format("一个对象,{0},{1}", oData.Id, oData.Name);
return strName;
}
备注:这里参数列表最好写上[FromBody],虽然不写也能拿到值。
3、一个数组参数
- //Post数组作为参数
- var post_f3 = function () {
- var arr = ["1", "2", "3", "4"];
- $.ajax({
- type: "post",
- url: "/api/Demo/PostArray",
- contentType: 'application/json',
- data: JSON.stringify(arr),
- success: function (data, status) {
- if (status == "success") {
- $("#div_test").html(data);
- }
- }
- });
- }

//Post数组作为参数
var post_f3 = function () {
var arr = ["1", "2", "3", "4"];
$.ajax({
type: "post",
url: "/api/Demo/PostArray",
contentType: 'application/json',
data: JSON.stringify(arr),
success: function (data, status) {
if (status == "success") {
$("#div_test").html(data);
}
}
});
}
这里我们说一下contentType和dataType。
contentType
发送信息至服务器时内容编码类型。假如你不写的话,默认值是: "application/x-www-form-urlencoded"。
dataType
预期服务器返回的数据类型。
如果我们Post提交的是json参数,最好就写上 print?
- /// <summary>
- /// 数组作为参数
- /// </summary>
- /// <param name="ids"></param>
- /// <returns></returns>
- [HttpPost]
- [Route("PostArray")]
- public object Post(string[] ids)
- {
- return String.Format("{0},{1},{2}", ids[0], ids[1], ids[2]);
- }

/// <summary>
/// 数组作为参数
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[HttpPost]
[Route("PostArray")]
public object Post(string[] ids)
{
return String.Format("{0},{1},{2}", ids[0], ids[1], ids[2]);
}
4、实体集合参数
- //Post对象集合,多个相同对象(多个不同对象的时候可以将多个对象封装成一个扩展对象)
- var post_f4 = function () {
- var arr = [
- { Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
- { Id: "2", Name: "Lilei", CreateTime: "1990-12-11" },
- { Id: "3", Name: "Lucy", CreateTime: "1986-01-10" }
- ];
- $.ajax({
- type: "post",
- url: "/api/Demo/PostMulti",//多个post的时候,路由会匹配不到,所以要自定义路由
- contentType: 'application/json',
- data: JSON.stringify(arr),
- success: function (data, status) {
- if (status == "success") {
- $("#div_test").html(data);
- }
- }
- });
- }

//Post对象集合,多个相同对象(多个不同对象的时候可以将多个对象封装成一个扩展对象)
var post_f4 = function () {
var arr = [
{ Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
{ Id: "2", Name: "Lilei", CreateTime: "1990-12-11" },
{ Id: "3", Name: "Lucy", CreateTime: "1986-01-10" }
];
$.ajax({
type: "post",
url: "/api/Demo/PostMulti",//多个post的时候,路由会匹配不到,所以要自定义路由
contentType: 'application/json',
data: JSON.stringify(arr),
success: function (data, status) {
if (status == "success") {
$("#div_test").html(data);
}
}
});
}
后台的控制器方法
- /// <summary>
- /// 对象集合
- /// </summary>
- /// <param name="lstCharging"></param>
- /// <returns></returns>
- [HttpPost]
- [Route("PostMulti")]
- public object Post([FromBody]List<TbCharging> lstCharging)
- {
- return String.Format("{0},{1}", lstCharging[0].Name, lstCharging[1].Name);
- }

/// <summary>
/// 对象集合
/// </summary>
/// <param name="lstCharging"></param>
/// <returns></returns>
[HttpPost]
[Route("PostMulti")]
public object Post([FromBody]List<TbCharging> lstCharging)
{
return String.Format("{0},{1}", lstCharging[0].Name, lstCharging[1].Name);
}
自定义路由
使用场景:用于方法重载,忽略方法名,自定义url
使用步骤:
1、在控制器类上方加入一个标记
- [RoutePrefix("api/Demo")]
- public class DemoController : ApiController
- {}

[RoutePrefix("api/Demo")]
public class DemoController : ApiController
{}
2、在方法中加入路由标记
- /// <summary>
- /// 数组作为参数
- /// </summary>
- /// <param name="ids"></param>
- /// <returns></returns>
- [HttpPost]
- [Route("PostArray")]
- public object Post([FromBody]string[] ids)
- {
- return String.Format("{0},{1},{2}", ids[0], ids[1], ids[2]);
- }

/// <summary>
/// 数组作为参数
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[HttpPost]
[Route("PostArray")]
public object Post([FromBody]string[] ids)
{
return String.Format("{0},{1},{2}", ids[0], ids[1], ids[2]);
}
备注:上面的api/Demo和PostArray可以自己定义名字。像我这样写就可以直接用 url:"/api/Demo/PostArray"来访问了。
MVC和WebApi 使用get和post 传递参数。的更多相关文章
- MVC和WebApi 使用get和post 传递参数(转)
出处:http://blog.csdn.net/qq373591361/article/details/51508806 我们总结一下用js请求服务器的传参方法. Get方式 Get主要是用来查询,一 ...
- MVC和WebApi 使用get和post 传递参数。 转载https://blog.csdn.net/qq373591361/article/details/51508806
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq373591361/article/details/51508806我们总结一下用js请求服务器的 ...
- MVC怎么在当前视图中,传递参数给到另外一个视图?
在TransData.cshtml视图中: <div> <!--在一个视图中,请求另外一个视图,并且将数据传到另外一个视图--> <!--视图中调用无返回值的方法,需要加 ...
- SlickOne -- 基于Dapper, Mvc和WebAPI 的快速开发框架
前言:在两年前,项目组推出了基于Dapper,Mvc和WebApi的快速开发框架,随着后续Slickflow产品的实践和应用,今再次对SlickOne项目做以回顾和总结.其目的是精简,持续改进,保持重 ...
- 【WebApi系列】详解WebApi如何传递参数
WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...
- SlickOne敏捷开发框架介绍(一) -- 基于Dapper, Mvc和WebAPI 的快速开发框架
前言:在两年前(最初发布时间:2013年1月9日(csdn),当前文章时间2015年11月10日),项目组推出了基于Dapper,Mvc和WebApi的快速开发框架,随着后续Slickflow产品的实 ...
- WebAPI学习日记一:Ajax请求传递参数遇到的问题
首先,本人大学刚毕业,想把自己学习的一些东西记录下来,也是和大家分享,如有不对之处还请多加指正.声明:但凡是我博客里的文章均是本人实际操作遇到的例子,不会随便从网上拷贝或者转载,本着对自己和观众负责的 ...
- MVC 从后台页面 取前台页面传递过来的值的几种取法
MVC 从后台页面 取前台页面传递过来的值的几种取法 <1>前台页面 Index视图 注意:用户名表单的name值为txtName 密码表单的name值为txtPassword & ...
- 给Asp.Net MVC及WebApi添加路由优先级
一.为什么需要路由优先级 大家都知道我们在Asp.Net MVC项目或WebApi项目中注册路由是没有优先级的,当项目比较大.或有多个区域.或多个Web项目.或采用插件式框架开发时,我们的路由注册很可 ...
随机推荐
- 欧拉工程第55题:Lychrel numbers
package projecteuler51to60; import java.math.BigInteger; import java.util.Iterator; import java.util ...
- Facebook揭密:如何让MySQL数据库集群自主运行
Facebook运行着全球最大的MySQL数据库集群,该集群分布在两个大洲上的多个数据中心中数以千计的服务器上.让人不解的是,Facebook只动用了一个很小的团队来管理这个庞大的MySQL数据库集群 ...
- ubuntu14.04安装MATLAB R2014a
1. 首先现在matlab2014a,http://pan.baidu.com/s/1pJGF5ov [Matlab2014a(密码:en52).该文件下载解压后如下所示: 2. 解压解压包(用lin ...
- 如何成为高级java程序员
或许您已经读过我的那篇小文<如何成为java初级程序员>,那里面只介绍了成为一个JAVA程序员应该具备的一些知识.我相信您绝不会只想着做一个初级的程序员,上了软件开发的小船,您肯定有着远大 ...
- VBA高效删除不连续多行
最近在搞VBA,在感叹Excel功能强大的同时,对于新接触的一门编程语言也很烦恼.很多基础的语法都要靠网上搜索.现总结一些学习到的心得. VBA高效删除不连续多行 在一个拥有几万条数据的Excel中, ...
- Swift 使用CollectionView 实现图片轮播封装就是这样简单
前言: 这篇你可以学会自定义视图,创建collectionView,协议的使用,定时器; 自制图片 先上Demo:Github上封装好的下载即用, 好用请Star Thanks首先新建一个继承于UIV ...
- iOS开发--appstore应用上架
除了企业级的应用,一般一个应用开发完成后,都会上架App Store.其实上架流程并不繁琐,麻烦的是要耗时等待审核,如果被拒,修改后又需要等待.被拒的原因很多(真的很多…),比如程序有崩溃,适配没做好 ...
- SPRING IN ACTION 第4版笔记-第十一章Persisting data with object-relational mapping-004JPA例子的代码
一.结构 二.Repository层 1. package spittr.db; import java.util.List; import spittr.domain.Spitter; /** * ...
- Struts2笔记——类型转换
概述 * 从一个HTML 表单到一个Action 对象, 类型转换是从字符串到非字符串. >HTTP 没有 “类型” 的概念. 每一项表单输入只可能是一个字符串或一个字符串数组. 在服 ...
- HDU 4648 Magic Pen 6 思路
官方题解: 题意转化一下就是: 给出一列数a[1]...a[n],求长度最长的一段连续的数,使得这些数的和能被M整除. 分析: 设这列数前i项和为s[i], 则一段连续的数的和 a[i]+a[i+1] ...