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

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

时间: 2024-07-31 14:25:48

在Web api2 中传递复杂参数的一点心得的相关文章

js的url中传递中文参数乱码,如何获取url中参数问题

一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript”> function send(){ var url = "test01.html"; var userName = $("#userName").html(); window.open(encodeURI(url + "?userName="

ajax请求中传递的参数中如果含有特殊字符怎么处理?

在JQUERY AJAX开发中遇到了下面的一个问题,在执行AJAX请求的时候,需要传递一个“50%”的参数,而这个参数中含有特殊字符%.这样的话就会出现问题了,我们知道服务器在发送请求的时候,会将url中的参数转化成类似于“%2C%2F%3F%3A%40%26%3D%2B%24%23”,所以在我们执行含有这样特殊字符的ajax请求的时候就会出现错误,因为我们传递的参数可能发生了变化,也可能由于参数本身中就含有特殊字符所以系统没有办法编译它. 可能会抛出这样的一个异常: 警告: Parameter

Dependency Injection in ASP.NET Web API 2 (在web api2 中使用依赖注入)

原文:http://www.asp.net/web-api/overview/advanced/dependency-injection 1 什么是依赖注入(Dependency Injection) 依赖,简单来说就是一个对象需要的任何其他对象.具体解释请Google或百度.在我们使用Web api2  开发应用程序时,通常都会遇到Controller  访问库 Repository 问题. 例如:我们定义一个Domain 对象 public class Product { public in

web.xml中servlet初始化参数的设置

<context-param><param-name>param1</param-name><param-value>value1</param-value></context-param><context-param><param-name>param2</param-name><param-value>value2</param-value></context-pa

C/C++中传递数组参数的问题

我真是太菜了,本来我是今天打算好好搞搞dynamic_programming一系列的经典问题,结果只是停留在把数组连乘的原理给看懂了而已. 原因嘛: 1.当我想要动手实现时,为了给函数和变量起个专业点儿的名字,特意去看了一些细节的命名规范问题: 2.呦西,命名规范解决了,但是名字怎么取才能看起来逼格高一些呢,不是说好的代码不需要注释,只看命名就行了么.然后我发现我想表达的变量名字对应的单词我不会,于是我又去查单词了: 3.呦西+1,命名总算搞定了,但是这个参考代码里面,传递参数为什么用vecto

【前端】vue项目 url中传递数组参数

[问题情景] 我在项目中使用了一个iframe,引入另一个项目,想通过动态修改iframe的src使iframe中的页面动态展示,在这个过程中,我碰到了一个问题,就是我往url传递数组参数的时候,接受到的是[object object],这使我读不出我传递的参数.但是我百度谷歌了一把,都没有找到很好的解决方案.下面附上我的解决方案. [解决方案] 传递参数的页面 let testArray = [{a:1},{b:2},{c:3}]; let testStr = encodeURICompone

java基础知识 学习 关于URL中传递的参数含有特殊字符

有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了.下表中列出了一些URL特殊符号及编码                                             1. +        URL 中+号表示空格     %2B 2. 空格 URL中的空格可以用+号或者编码 %20 3. /      分隔目录和子目录            %2F 4. ?       分隔实际的 URL 和参数                     

在JDBC中传递table参数给SQL server stored procedure

SQL Server JDBC驱动不支持直接传递Table参数给stored procedure 我的做法是先创建一个临时表,将需要插入的数据先插入到临时表里面,然后把这个临时表作为参数,传送给stored procedure.使用了Preparestatement来避免SQL注入问题. 先创建User Defined Table CREATE TYPE UserIdList AS TABLE( userId uniqueidentifier NOT NULL ); 再创建存储过程: CREAT

Asp.Net中的获取Web.config中设置的参数!(前后台的代码示例)

一.Web.config中设置代码 <appSettings>         <add key="deleted" value="1"/><!--删除标志-->    </appSettings> 二.在App_Code中建立sys.cs // 注意:需要添加相应的引用命名空间using public class sys{    public static int deleted = int.Parse(Config