繁体   English   中英

ASP.Net Core 3 将 JSON 数组发布到控制器

[英]ASP.Net Core 3 Posting JSON array to controller

我在将 JSON 对象数组传递给 ASP.Net 核心 3 中的 MVC 控制器时遇到问题。JSON 对象是从 CSV 文件构建的,并通过 AJAX 调用传递。 调用了正确的操作,但接收到的对象始终为空。

JS:

async function updateData(){
    var obj = await getData();
    $.ajax({
        type: "POST",
        contentType: "application/json",
        url: "/admin/metric/Update",
        data: obj,
        dataType: 'json',
        success: function (data) {
            console.log("SUCCESS : ", data);
        },
        error: function (e) {
            console.log("ERROR : ", e);
        }
    });
}

async function getData(){
    var metric = {};
    var metrics = [];

    var response = await fetch('https://bloburi.net/source/file.csv');
    var data = await response.text();
    var table = data.split('\n').slice(1);
    table.forEach(row => {
        var columns = row.split(',');
        metric["FirstName"] = columns[0];
        metric["LastName"] = columns[1];
        metric["Email"] = columns[2];
        metric["AverageHandleTime"] = columns[3];
        metric["AverageFollowUp"] = columns[4];
        metric["AverageHold"] = columns[5];
        metric["Date"] = columns[6];
        metrics.push(JSON.stringify(metric));
    });

    console.log(metrics);
    return metrics;
}

楷模:

public class MetricBase
    {
        [Required]
        public string Date { get; set; }
        public double AverageHandleTime { get; set; }
        public double AverageHold { get; set; }
        public double AverageFollowUp { get; set; }
        public string Email { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

public class MetricModel
    {
        public IEnumerable<MetricBase> MetricBase { get; set; }
    }

控制器:

[HttpPost]
public IActionResult Update([FromBody]MetricModel obj)
{
    return Json(new { obj });
}

我认为问题可能在于我如何定义接收 JSON 的类,但我尝试了多种方法,例如将 MetricBase MetricBaseList<>或直接定义为MetricModel的数组,但似乎没有上班。

任何帮助表示赞赏!

您通过代码在数组中添加字符串化项目

metrics.push(JSON.stringify(metric));

而不是字符串化整个数组。 将行更改为

metrics.push(metric);

data: obj,

data: JSON.stringify(obj), .

随着提到的变化, $.ajax发送整个数组。 也将动作更改为

public IActionResult Update([FromBody]IEnumerable<MetricBase> obj)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM