星驰编程网

免费编程资源分享平台_编程教程_代码示例_开发技术文章

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

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

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言