You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AJAX向C#控制器发送JSON时参数Count为0(.NET 7)

问题:向ASP.NET控制器发送JSON无法接收参数

问题描述

尝试向控制器发送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"
   },
   ...
]

解决方案

尝试以下修复步骤:

  1. 添加[FromBody]特性
    ASP.NET默认不会自动从请求体绑定复杂类型,需在参数上标注[FromBody]:
[HttpPost]
public JsonResult BulkPost([FromBody] List<Categoria> categorias)
{
    // Magic happens
}
  1. 移除traditional选项
    traditional: true用于处理传统表单数据格式,JSON序列化数组无需此配置,删除该参数:
$.ajax({
    url: 'Categoria/BulkPost',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    dataType: 'JSON',
    data: jsonObject,
    success: function () {
        alert('siuuuu');
    }
});
  1. 过滤无效元素
    文本分割可能产生空字符串或无效元素,导致模型绑定失败,添加过滤逻辑:
result.map(function (element) {
    const cleanedName = element.replace(/[\u200B-\u200D\uFEFF]/g, '').trim();
    if (cleanedName) {
        var cat = {
            'Name': cleanedName
        };
        arr.push(cat);
    }
})
  1. 调整DataContract配置
    若使用[DataContract],确保所有需绑定属性都标注[DataMember];也可尝试移除[DataContract]和[DataMember],避免与默认模型绑定器冲突。

  2. 验证请求路径
    检查Categoria/BulkPost是否为正确相对路径,通过浏览器开发者工具查看请求状态码与响应,确认请求是否到达目标方法。

内容的提问来源于stack exchange,提问作者Decoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 15:41:18