使用 AJAX 将 JSON 发送到 C# 控制器给出 Count = 0 (.NET 7)

问题描述 投票:0回答:1

当我尝试向控制器发送 JSON 时,我没有收到任何参数。

这是我的 JavaScript:

var input = document.getElementById("input");

input.addEventListener('change', function () {
    const reader = new FileReader();
    reader.readAsText(input.files[0]);
    reader.onload = () => {
        const text = reader.result;
        var result = text.replace(/([0-9":])/g, '');
        result = result.split(/\r?\n/);
        console.log(result);

        var arr = new Array();

        result.map(function (element) {
            var cat = {
                'Name': element.replace(/[\u200B-\u200D\uFEFF]/g, '')
            };

            arr.push(cat);
        })

        jsonObject = JSON.stringify(arr);

        console.log(jsonObject);

        $.ajax({
            url: 'Categoria/BulkPost',
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            dataType: 'JSON',
            data: jsonObject,
            traditional: true,
            success: function () {
                alert('siuuuu');
            }
        });
    }
});

这是我的控制器:

[HttpPost]
        public JsonResult BulkPost(List<Categoria> categorias)
        {
            //Magic happens
        }

我的模型:

[DataContract]
public class Categoria
{
    [Key]
    public int IdClas { get; set; }
    [Required]
    [DataMember(Name = "Name")]
    [DisplayName("Nombre de la categoría")]
    public string Name { get; set; }
}

这是生成的 JSON:

[
   {
      "Name":" Ayudas Funcionales"
   },
   {
      "Name":" EQUIPO MEDICO Y HOSPITALARIO"
   },
   {
      "Name":" Inventario"
   },
   ...
]

我已经尝试了在其他类似问题中看到的所有解决方案,但似乎没有一个对我有用:(。希望你能帮助我。

javascript c# json ajax asp.net-core
1个回答
0
投票

当我尝试将 JSON 发送到我的控制器时,我什么也没收到 作为参数。

实际上,默认情况下ajax请求类型是

application/x-www-form-urlencoded
,但您正在发送json数据,因此仅方法中的
List<Categoria> categorias
签名将无法使用ajax json数据与您的控制器方法定义进行通信。

最重要的是,当使用 ajax 请求主体发送请求时,必须用 [FromBody] 装饰 因为,参数的 [FromBody] 属性可以从 HTTP 请求主体和控制器操作参数期望列表中填充其属性 [FromBody] 与方法签名不匹配。

正确的控制器操作签名:

    [HttpPost]
    public JsonResult BulkPost([FromBody] List<Categoria> categorias)
    {
        //....rest of code 
    }

输出:

我已使用正确的 [FromBody] 属性并按预期工作,如下所示:

注意:如果您想了解更多详情,请参考此官方文档

© www.soinside.com 2019 - 2024. All rights reserved.