zoukankan      html  css  js  c++  java
  • 在Web api2 中传递复杂参数的一点心得

    这两天在做的一个项目基于webapi2,期间遇到了复杂参数传递的问题。其中刚好看到园友的这篇文章,但是我测试收结果是失败的,还不知道是什么原因。最终经过思考后,找到了一种方法,和大家分享下。

    在前端我需要通过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数据结构来组合类,并将属性名称一一对应上,就能准确将前端数据传递到后台上。

    一点经验,有错误的地方欢迎大家指正。

  • 相关阅读:
    看看自己敲了多少代码
    jquery中获取单选标签redio的val
    @functools.wrapes
    SQLAlachemy 自动提交配置 SQLALCHEMY_COMMIT_ON_TEARDOWN
    ajax 常用格式
    开发文档收藏
    falsk 请求钩子
    数组中出现次数超过数组长度一半的值 分类: C/C++ 2015-07-09 15:38 142人阅读 评论(0) 收藏
    二叉搜索树(C++) 分类: C/C++ 数据结构与算法 2015-07-09 11:18 205人阅读 评论(0) 收藏
    程序员必读的六本书 2015-07-08 11:26 21人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/kylewell/p/5674564.html
Copyright © 2011-2022 走看看