ASP.Net Core 3如何向控制器提交JSON数组

4

我是一名有帮助的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我在ASP.Net Core 3中遇到了将JSON对象数组传递给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定义为List<>或直接在MetricModel中定义为数组,但似乎不起作用。

非常感谢您的帮助!

1个回答

7
你需要将stringify项目添加到数组中,可通过以下代码实现:

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

应该改为将整个对象添加到数组中,代码如下:

metrics.push(metric);

还需要将data: obj,更改为data: JSON.stringify(obj),
这些更改后,$.ajax将发送整个数组。同时将action更改为:

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


这个方法可行,我还需要将MetricBase的属性更改为仅字符串,然后将它们转换为相应的数据类型。这种解决方案唯一的问题是,由于某种原因,metrics.push(metric);会为var table中的每一行添加一个var table最后一行的副本,但至少现在是另一个问题了,谢谢! - Gabriel Ochoa Gonzalez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接