这两天在做的一个项目基于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 > )
{
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 = , Message = newFilePath });
}
else
{
return Json(new ResultData { StatusCode = , 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数据结构来组合类,并将属性名称一一对应上,就能准确将前端数据传递到后台上。

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

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

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

    一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript ...

  2. Js的Url中传递中文参数乱码的解决

    一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: 2. 接收参数页面:test02.html 二:如何获取Url& ...

  3. linux中probe函数中传递的参数来源(上)

    点击打开链接 上一篇中,我们追踪了probe函数在何时调用,知道了满足什么条件会调用probe函数,但probe函数中传递的参数我们并不知道在何时定义,到底是谁定义的,反正不是我们在驱动中定义的(当然 ...

  4. 关于HTTP请求中更改body中传递的参数方法

    更改body中传递的参数方法: String txId = UUID.randomUUID().toString().replaceAll("-", ""); ...

  5. C#中web页面之间传递数组参数

    一直以来用到的都是在url地址中传递string类型,那么如果是数组类型的该怎么传递呢? ]; arryStr[] = "a"; arryStr[] = "b" ...

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

    原文:http://www.asp.net/web-api/overview/advanced/dependency-injection 1 什么是依赖注入(Dependency Injection) ...

  7. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

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

    <context-param><param-name>param1</param-name><param-value>value1</param- ...

  9. DLL中传递STL参数,vector对象作为dll参数传递等问题(转)

    STL跨平台调用会出现很多异常,你可以试试. STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下 ...

随机推荐

  1. Android 学习笔记之AndBase框架学习(三) 使用封装好的函数完成Http请求..

    PS:踏踏实实走好每一步... 学习内容: 1.使用AndBase框架实现无参Http Get请求... 2.使用AndBase框架实现有参Http Post请求... 3.使用AndBase框架实现 ...

  2. 查找最小的k 个元素之C#算法实现

    紧接着上一篇微软编程面试100题,这次想解决的是查找最小的K个元素,题目是:输入n 个整数,输出其中最小的k 个.例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 ...

  3. CSS布局 -- 左侧定宽,右侧自适应

    左侧定宽,右侧自适应 有很多种方法可以实现 缩小窗口试试看? 方案一: 左边左浮动,右边加个margin-left 查看 demo <!DOCTYPE html PUBLIC "-// ...

  4. EF容器---代理类对象

    #region 修改--官方的修改是,先查询,然后修改 /// <summary> /// 修改--官方的修改是,先查询,然后修改 /// </summary> static ...

  5. Azure开发者任务之六:使用WCF Service Web Role

    在本文中,我们将会在local development fabric上创建一个WCF服务角色,然后在一个控制台应用程序中使用它. WCF服务角色可以让我们创建一个WCF服务,并且把它托管在Window ...

  6. HTTP请求中的Body构建——.NET客户端调用JAVA服务进行文件上传

    PS:今日的第二篇,当日事还要当日毕:)   http的POST请求发送的内容在Body中,因此有时候会有我们自己构建body的情况. JAVA使用http—post上传file时,spring框架中 ...

  7. C# ObjectCache、OutputCache缓存

    /// <summary> /// 缓存操作类 /// </summary> public class Cache { private static List<strin ...

  8. Oracle锁表与解锁

    查看锁表语句:方法1:    select sess.sid,           sess.serial#,           lo.oracle_username,           lo.o ...

  9. linux怎么模糊查找一个文件

    linux如何模糊查找一个文件 在当前目录下搜索指定文件: find . -name test.txt 在当前目录下模糊搜索文件: find . -name '*.txt' 在当前目录下搜索特定属性的 ...

  10. 为什么重新设计 ASP.NET?

    灵活的跨平台运行时需求 早期 .NET Framework 版本一直作为单一且全面的整体进行安装,每个新版本都包含了新功能和几乎所有早期功能,而鲜有删减,这就不可避免的造成Framework的体积的增 ...