【问题标题】:Web API post array but frombody is always nullWeb API 发布数组,但 frombody 始终为空
【发布时间】:2018-12-26 05:52:16
【问题描述】:

我有以下格式的数组,需要发布到 API:

console.log(addserverList);

我想把它传递给 api 的 post 方法

   const options = {headers: {'Content-Type': 'application/json'}};
            return this.http.post(           'http://localhost:54721/api/BulkUpload/SaveBulkUploadData',addserverList,options)

我可以发布到 api,但是传递的数据总是显示为 NULL

我的模型结构如下:

生成数组的函数

private extractData(res: Response) {

        let csvData = res['_body'] || '';
        let allTextLines = csvData.split(/\r\n|\n/);
        let headers = allTextLines[0].split(',');
        let lines = [];

        for ( let i = 0; i < allTextLines.length; i++) {
            // split content based on comma
            let data = allTextLines[i].split(',');
            if (data.length == headers.length) {
                let tarr = [];
                for ( let j = 0; j < headers.length; j++) {
                    tarr.push(data[j]);
                }
                lines.push(tarr);
            }
        }
        this.csvData = lines;

       // console.log(JSON.stringify(this.csvData));
        this.saveBulkUpload();  
      }

【问题讨论】:

  • 您发布的是字符串数组,而不是映射到所需模型的对象数组。
  • Post information as text and not images 将增加获得解决方案的机会。
  • ASP 无法将string[] 的数组正确反序列化为List&lt;AddServer&gt;。
  • 应该有什么替代方案?
  • 取决于发送的数据是否格式错误或预期是否不正确

标签: c# .net angular asp.net-web-api asp.net-web-api2


【解决方案1】:

您的 JSON 是一个数组数组。该方法需要一个与AddServer 类的格式匹配的对象数组。

您的 JSON 应该如下所示:

[
   {
        "HostName": "Server1", 
        "Type1": "type1_1", 
        "Type2": "type1_1", 
    },
    {
        "HostName": "Server2", 
        "Type1": "type1_2", 
        "Type2": "type2_2",  
    }
]

功能变更

这需要一些猜测,因为我不知道正在输入该函数的服务合同,但需要更改的是循环中的内容。

for ( let i = 0; i < allTextLines.length; i++) {
        // split content based on comma
        let data = allTextLines[i].split(',');

        if (data.length == headers.length) {
            let tobj = {};

            tobj.HostName = data[0];
            tobj.Type1= data[1];
            tobj.Type2= data[2];

            lines.push(tobj);
        }
    }

【讨论】:

  • 如何把上面的数组转换成这个json格式?
  • 这首先取决于您如何生成数组。你是用 JavaScript 手动创建的吗?
  • 是的,它是通过 angular typescript 函数手动生成的
  • 如果您发布该函数,那么可能会向您展示如何编辑它以生成正确的 JSON。本质上,尽管您需要使用 java 脚本对象而不是字符串的子数组来填充父数组。如果您不熟悉这些,可以在这里找到一个好的指南:w3schools.com/js/js_object_definition.asp
  • 非常感谢您的支持,它就像一个魅力,您的努力值得称赞。再次感谢您!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
相关资源
最近更新 更多