前端传递给后端复杂类型 webapi 等
来自URL:https://www.cnblogs.com/kylewell/p/5674564.html
前端我需要通过ajax 传递如下的一个json对象:
var model = {
                Parameters: [
                    { Name: "A", Value: 1 },
                    { Name: "B", Value: 2 }
                ]
            };                      
所以我的ajax提交代码如下:

$("#btnGetModel").click(function () {
            //var model = getParamenters();
            var model = {
                Parameters: [
                    { Name: "A", Value: 1 },
                    { Name: "B", Value: 2 }
                ]
            };
            if (model.Parameters.length > 0) {
                $.ajax({
                    url: baseUri + "api/Model/Show",
                    type: "post",
                    dataType: "json",
                    data: model,
                    beforeSend: function (request) {
                        request.setRequestHeader('Authorization', 'Bearer ' + getCookie("token"));
                    }
                }).then(
                    function (d) {
                        if (d.StatusCode == 0) {
                            //SetModel(d.Message);
                            initModel(d.Message);
                        } else {
                            showMsg(d.Message,"msgContainer");
                        }
                    }, function () {
                        showMsg("请求失败", "msgContainer");
                    }
                );
            } else {
                showMsg("没有设定正确的参数!", "msgContainer");
            }
        });

这里注意一下传递的json对象名称为model。
然后看一下后端接口:api/Model/Show。不用看具体实现代码,而要注意传递的参数的类型和参数的名称。

[HttpPost]
[ActionName("Show")]
[Authorize]
public async Task<IHttpActionResult> Generate([FromBody]ModelInfo model)
{
Dictionary<string, double> pars = new Dictionary<string, double>();
if (model.Parameters.Count > 0)
{
foreach (Parameter par in model.Parameters)
{
pars.Add(par.Name, par.Value);
}
}
string newFilePath = await modelMaker.Generate(pars);
if (!string.IsNullOrEmpty(newFilePath))
{
return Json(new ResultData { StatusCode = 0, Message = newFilePath });
}
else
{
return Json(new ResultData { StatusCode = 1, Message = "模型生成失败!" });
}
}

可以看到,传递的参数名称也是model,其实这里是和json对象的名称是一致的。
接着,继续看ModelInfo这个类型
public class ModelInfo
{
public List<Parameter> Parameters { get; set; }
}
这个类里面有个Parameter类型集合的属性,而这个属性的名称是Parameters,而这又是跟json对象的Parameters属性对应。简单来说,这个属性就是一个集合,里面又包含了对象。
下面接着看Parameter这个对象:
public class Parameter
{
public string Name { get; set; }
public double Value { get; set; }
}
这个对象里面的属性名称又和json对象数组中的对象的属性名称又对应上了。
这样前端的json类型就能准确传递到后端来了。
总结:前端不管是多复杂的json数据类型,只要在后端按照这个json数据结构来组合类,并将属性名称一一对应上,就能准确将前端数据传递到后台上。
前端传递给后端复杂类型 webapi 等的更多相关文章
- 前端传递给后端且通过cookie方式,尽量传递id
		前端传递给后端且通过cookie方式,尽量传递id 
- 前端传递的json格式与SpringMVC接收实体类的对应关系
		这篇文章主要是帮助刚刚入行的猿猿尽快适应Restful风格的搬砖生活 @RequestBody注解 基本介绍:@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数 ... 
- java后端无法接收到前端传递的json对象
		java后端无法接收到前端传递的json对象 一·可能是因为未使用@RequestBody 在Controller层中,要么使用@RestController要么使用@Controller+@@Req ... 
- 前端angularjs+requirejs+dhtmlx 后端asp.net webapi
		享一个前后端分离方案源码-前端angularjs+requirejs+dhtmlx 后端asp.net webapi 一.前言 半年前左右折腾了一个前后端分离的架子,这几天才想起来翻出来分享给大家 ... 
- 前端基于react,后端基于.net core2.0的开发之路(1) 介绍
		文章提纲目录 1.前端基于react,后端基于.net core2.0的开发之路(1) 介绍 2.前端基于react,后端基于.net core2.0的开发之路(2) 开发环境的配置,注意事项,后端数 ... 
- Spring MVC前传递和后端接收的参数名不一致处理方式
		前端传递的变量和后端接收的变量名字不一致时,用注解@RequestParam来实现数据的传递 例如:@RequestParam(value="id") //实现商品的分类目录展现 ... 
- 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(4)
		chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ... 
- 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(3)
		chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ... 
- 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(2)
		chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ... 
随机推荐
- [sublime3] 在linux下的终端中使用sublime3打开文件
			通过ln命令创建软连接实现 echo $PATH 查看路径 例 我的路径是: /home/rh/anaconda3/bin:/home/rh/bin:/home/rh/.local/bin:/usr/ ... 
- ArcGIS API For JavaScript 开发(五)要素图层的编辑
			2018-4-3 这篇博客主要讲述要素的层的编辑功能,是基于FeatureLayer的applyEdit方法.由于自己目前正在学习当中,有许多不足之处请各位指出,欢迎指导学习! 主要功能是 1.将地图 ... 
- springboot-权限控制shiro(一)
			1. 场景描述 (1)权限控制是IT项目特别是企业项目,绕不开的重要模块,接下来结合springboot介绍下权限控制框架shiro. (2)springboot集成shiro的东西有点多,一篇博客完 ... 
- java练习---9
			//程序员:罗元昊 2017.10.22 package cn.lyh; import com.rupeng.game.GameCore; public class L implements Runn ... 
- pheatmap绘制“热图”,你需要的都在这
			热图可以聚合大量的数据,并可以用一种渐进色来优雅地表现,可以很直观地展现数据的疏密程度或频率高低. 本文利用R语言 pheatmap 包从头开始绘制各种漂亮的热图.参数像积木,拼凑出你最喜欢的热图即可 ... 
- 【iOS】XIB 调整视图大小
			使用 XIB 创建视图的时候,拖拽 UIView 到画布时,大小是不可调整的,如何自由调整大小呢? 选中 UIView 并打开属性面板,将 Simulated Metrics 中的 Size 设为 F ... 
- Ubuntu 系统如何用pycharm开发python—OpenCV
- html+css+dom补充
			补充1:页面布局 一般像京东主页左侧右侧都留有空白,用margin:0 auto居中,一般.w. <!DOCTYPE html> <html lang="en"& ... 
- wamp不显示文件图标
			wamp不显示文件图标 效果如下图 右键图片"在新的标签页打开图片"后会跳转到404页面,并显示The requested URL /icons/unknown.gif was n ... 
- 记我的一次 Java 服务性能优化
			背景 前段时间我们的服务遇到了性能瓶颈,由于前期需求太急没有注意这方面的优化,到了要还技术债的时候就非常痛苦了. 在很低的 QPS 压力下服务器 load 就能达到 10-20,CPU 使用率 60% ... 
