前端传递给后端复杂类型 webapi 等

Posted yulin10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端传递给后端复杂类型 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 等的主要内容,如果未能解决你的问题,请参考以下文章

如何将用户信息从前端传递到后端

JS传递对象数组为参数给后端,后端获取

前端发键值对类型的list给后端

前端给后端发送请求时,时间格式怎么传

前端与后端传递数据 — — JSON

将 jinja 变量传递给后端