在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 > )
{
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 中传递复杂参数的一点心得的更多相关文章
- js的url中传递中文参数乱码,如何获取url中参数问题
一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript ...
- Js的Url中传递中文参数乱码的解决
一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: 2. 接收参数页面:test02.html 二:如何获取Url& ...
- linux中probe函数中传递的参数来源(上)
点击打开链接 上一篇中,我们追踪了probe函数在何时调用,知道了满足什么条件会调用probe函数,但probe函数中传递的参数我们并不知道在何时定义,到底是谁定义的,反正不是我们在驱动中定义的(当然 ...
- 关于HTTP请求中更改body中传递的参数方法
更改body中传递的参数方法: String txId = UUID.randomUUID().toString().replaceAll("-", ""); ...
- C#中web页面之间传递数组参数
一直以来用到的都是在url地址中传递string类型,那么如果是数组类型的该怎么传递呢? ]; arryStr[] = "a"; arryStr[] = "b" ...
- Dependency Injection in ASP.NET Web API 2 (在web api2 中使用依赖注入)
原文:http://www.asp.net/web-api/overview/advanced/dependency-injection 1 什么是依赖注入(Dependency Injection) ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- web.xml中servlet初始化参数的设置
<context-param><param-name>param1</param-name><param-value>value1</param- ...
- DLL中传递STL参数,vector对象作为dll参数传递等问题(转)
STL跨平台调用会出现很多异常,你可以试试. STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下 ...
随机推荐
- .NET ORM 哪家强
ORM到底哪家强? 很多人都想知道这个问题,自已也没测试过,只能道听途说. 闲的无聊就将几个ORM拿出来比一比,假如怀疑测试代码有问题可以将它下载下来慢慢研究. 参赛ORM 1.SqlSugar:是一 ...
- UPW学习资料整理 .NET C# 转
开发工具下载https://www.visualstudio.com/?Wt.mc_id=DX_MVP5000319 Windows 10 UWP开发视频1http://blogs.windows.c ...
- 新手学习Cocoapods教程
CocoaPods简介 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如AFNetWorking等等.手动去下载所需类库十分麻烦.另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下 ...
- VC使用libcurl模拟登录CSDN并自动评论资源以获取积分
环境:Win7 64位+VC2008 软件及源码下载:(http://pan.baidu.com/s/1jGE52pK) 涉及到的知识点: C++多线程编程 libcurl的使用(包括发送http请求 ...
- 常见的几种 CSS 水平垂直居中解决办法
用CSS实现元素的水平居中,比较简单,可以设置text-align center,或者设置 margin-left:auto; margin-right:auto 之类的即可. 主要麻烦的地方还是在垂 ...
- Winform开发框架之客户关系管理系统(CRM)的开发总结系列2-基于框架的开发过程
在上篇随笔<Winform开发框架之客户关系管理系统(CRM)的开发总结系列1-界面功能展示>中介绍了我的整个CRM系统的概貌,本篇继续本系列的文章,介绍如何基于我的<winform ...
- Try out the latest C++ compiler toolset without waiting for the next update of Visual Studio
Updated 22/Apr/2016: The NuGet package is now being uploaded daily. The payload doesn’t change every ...
- 动态生成RDLC报表
前段时间,做了RDLC报表,主要是三块功能: 1.从DataGrid提取(包括最新的增删改)的数据,自动生成对应的RDLC报表文件(以流的形式驻存在内存中),用ReportViewer类来展示.打印. ...
- Js中各类型数据到bool的转换
在返回Json字符串给前台时遇到的问题,返回的bool数据总是为TRUE 特意查了一下,发现了Js中各类数据转换到bool型是的结果. 希望能给遇到同样问题的人一点帮助. 数据类型 转换为bool ...
- 利用PBfunc在Powerbuilder中使用https获取微信的AccessToken
在前篇中讲解了使用PBFunc在Powerbuilder自己进行http的GET和POST操作. 本篇简单用代码演示下https的微信AccessToken的获取: n_pbfunc_http lnv ...