MVC和WebApi 使用get和post 传递参数。 转载https://blog.csdn.net/qq373591361/article/details/51508806
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq373591361/article/details/51508806
我们总结一下用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);
}
}
});
}
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);
}
}
});
}
后台控制器方法
/// <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);
}
}
});
}
后台控制器方法
/// <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);
}
}
});
}
备注:到这里有没有发现多个参数和一个实体对象的请求方法是一样的,假如两个接收的方法都写在同一个控制器里面的话,路由是区分不出来要匹配那个方法处理,
所以要用自定义路由来区分,在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"));
}
备注:在使用Get传递实体对象参数的时候要注意,因为Get方式的时候参数是写在url的,所以我们在后台用[FromBody]是拿不到实体参数的,需要写[FromUri]才行。
Post方式
Post方式我们一般用来做增、删、改操作。在WebApi中Post仅仅用来做增加操作,修改用Put,删除用Delete。这些在新建模板的时候就自动为我们生成了。
还有要提一下的是Post只能传递一个参数,如果需要多个参数的时候我们需要把它们合并成一个扩展对象,当做对象来传递。
在后台接收的时候我们需要在参数列表里面写上[FromBody]因为Post方式的参数就不在Url里面了。
1、一个参数
//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);
}
}
});
}
注意:在写参数的时候我们不能把参数写成 data:{"name":"Jim"} 这种方式,因为在后台是拿不到值的。
后台控制器方法
/// <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);
}
}
});
}
后台控制器方法
/// <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);
}
}
});
}
这里我们说一下contentType和dataType。
contentType
发送信息至服务器时内容编码类型。假如你不写的话,默认值是: "application/x-www-form-urlencoded"。
dataType
预期服务器返回的数据类型。
如果我们Post提交的是json参数,最好就写上 contentType: 'application/json'
后台的控制器方法
/// <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);
}
}
});
}
后台的控制器方法
/// <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
{}
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"来访问了。
---------------------
作者:qq373591361
来源:CSDN
原文:https://blog.csdn.net/qq373591361/article/details/51508806
版权声明:本文为博主原创文章,转载请附上博文链接!
MVC和WebApi 使用get和post 传递参数。 转载https://blog.csdn.net/qq373591361/article/details/51508806的更多相关文章
- MVC和WebApi 使用get和post 传递参数(转)
出处:http://blog.csdn.net/qq373591361/article/details/51508806 我们总结一下用js请求服务器的传参方法. Get方式 Get主要是用来查询,一 ...
- MVC和WebApi 使用get和post 传递参数。
我们总结一下用js请求服务器的传参方法. Get方式 Get主要是用来查询,一般分为无参,一个参数,多个参数,实体对象参数. 1.无参 //Get没有参数 var get_f1 = function( ...
- asp.net mvc(模式)和三层架构(BLL、DAL、Model)的联系与区别 转载自:http://blog.csdn.net/luoyeyu1989/article/details/8275866
首先,MVC和三层架构,是不一样的. 三层架构中,DAL(数据访问层).BLL(业务逻辑层).WEB层各司其职,意在职责分离. MVC是 Model-View-Controller,严格说这三个加起来 ...
- MVC怎么在当前视图中,传递参数给到另外一个视图?
在TransData.cshtml视图中: <div> <!--在一个视图中,请求另外一个视图,并且将数据传到另外一个视图--> <!--视图中调用无返回值的方法,需要加 ...
- 如何用node命令和webpack命令传递参数 转载
1. 比如在项目中我们的publicPath需要根据服务器环境的变化而变化,这时我们会写一个配置文件,在webpack.config.js中读取,可以 如何才能 取到变量呢? 这里介绍一种方法: 如果 ...
- Spring Boot 和 Spring Cloud Feign调用服务及传递参数踩坑记录
背景 :在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.我们可以使用JDK原生的URLConnectio ...
- java调用python程序以及向python程序传递参数
在做项目的时候,经常会碰到这个问题,主要程序是用java写的,有些功能使用python写的,整个项目需要把java代码和python代码进行整合,在一个项目里面运行,这就涉及到java调用python ...
- shell传递参数
简单介绍python的脚本传参 我们知道python脚本传递参数,有一个很方便的方式-sys.argv.它将脚本本身名字和后面的各项参数都放入一个列表. 使用的时候,索引这个列表就可以了.例如: py ...
- 【Qt】信号和槽对值传递参数和引用传递参数的总结
在同一个线程中 当信号和槽都在同一个线程中时,值传递参数和引用传递参数有区别: 值传递会复制对象:(测试时,打印传递前后的地址不同) 引用传递不会复制对象:(测试时,打印传递前后的地址相同) 不在同一 ...
随机推荐
- Android 中三种启用线程的方法
在多线程编程这块,我们经常要使用Handler(处理),Thread(线程)和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 首先说明Android的CPU分配的最小单元是线程,Han ...
- [功能集锦] 002 - mysql查询数据库字典+导出+样式一键整合至excel
写在前面: 因为工作时候经常遇到半路接手项目的情况,由于年代久远,数据库字典这块经常缺失.故写此篇,以便复用,也希望对大家有点帮助. 随笔内容不高级,如有不妥,不吝指正. 20190730-加了一些简 ...
- Tcp协议介绍
前情提要:根据域名建立tcp链接之前要做两件事情,1 根据arp协议找到网管mac地址 2 通过dns服务器解析出域名的Ip地址,解析出域名的Ip地址之后就可以建立tcp链接了. tcp协议三个特点: ...
- dp或dfs(01背包问题)
链接:https://ac.nowcoder.com/acm/contest/993/C来源:牛客网题意:n头牛,给出它们的H高度,问这些牛的高度叠加起来大于等于书架高度,问叠加后的高度与书架的差值最 ...
- 搞定Oracle SCN -system change number
SCN是Oracle的内部时钟,用来反映数据库中所有变化,在运行过程中不断更新.SCN种类包括: (1)系统当前SCN (2)Checkpoint SCN ...
- C#面试 笔试题 三
1.传入某个属性的set方法的隐含参数的名称是什么? value,它的类型和属性所声名的类型相同. 2.C#支持多重继承么? 类之间不支持,接口之间支持.类对接口叫做实现,不叫继承. 3.C#中所 ...
- Spike Your CPU’s Processor in .Net
using System.Threading; using System.Runtime.InteropServices; // Target a specific processor for the ...
- React(1) --新建项目
搭建React开发环境之前的准备工作 1.必须要安装node.js (注意:安装node.js稳定版本) 2.安装cnpm,用cnpm替代npm npm install -g cnpm --regis ...
- TCP和UDP的区别,以及它们对应的协议有哪些?
TCP(传输控制协议) 是面向连接的协议.在收发数据前,一个TCP连接必须要经过“三次握手”建立可靠的连接.握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据.理想状态下 ...
- linux firewall
一.查看防火墙状态1.首先查看防火墙是否开启,如未开启,需要先开启防火墙并作开机自启 systemctl status firewalld 开启防火墙并设置开机自启 systemctl start f ...