javascript - ASP.Net Core 3 将 JSON 数组发布到 Controller

标签 javascript c# json asp.net-mvc asp.net-core

我在将 JSON 对象数组传递给 ASP.Net core 3 中的 MVC Controller 时遇到问题。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; }
    }

Controller :

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

我认为问题可能在于我如何定义接收 JSON 的类,但我已经尝试了多种方法,例如定义 MetricBase作为List<>或者直接作为 MetricModel 中的数组, 但它似乎不起作用。

感谢任何帮助!

最佳答案

您通过代码在数组中添加 stringify 项

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

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

metrics.push(metric);

data: obj,

data: JSON.stringify(obj), .

通过上述更改,$.ajax发送整个数组。同时将操作更改为

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

关于javascript - ASP.Net Core 3 将 JSON 数组发布到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59081880/

相关文章:

json - 在 ColdFusion 中将数据转换为 JSON 时出错

java - 为什么我的应用程序无法从我的 API 读取 JSON?

javascript - 以 anchor 为中心加载页面 - 浏览器在文档就绪事件后滚动到顶部?

javascript - node.js 错误 : ENOSYS spawn when executing command line command

c# - 如何在数据库中存储十进制值?

c# - .NET 架构设计问题

python - JSON 包含不正确的 UTF-8\u00ce\u00b2 而不是 Unicode\u03b2,如何在 Python 中修复?

javascript - jQuery 无法从文本框中获取值

javascript - 从数据库获取后对转换列值进行序列化

c# - 并行任务与委托(delegate)