使用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" }, ... ]
解决方案
尝试以下修复步骤:
- 添加[FromBody]特性
ASP.NET默认不会自动从请求体绑定复杂类型,需在参数上标注[FromBody]:
[HttpPost] public JsonResult BulkPost([FromBody] List<Categoria> categorias) { // Magic happens }
- 移除traditional选项
traditional: true用于处理传统表单数据格式,JSON序列化数组无需此配置,删除该参数:
$.ajax({ url: 'Categoria/BulkPost', type: 'POST', contentType: 'application/json; charset=utf-8', dataType: 'JSON', data: jsonObject, success: function () { alert('siuuuu'); } });
- 过滤无效元素
文本分割可能产生空字符串或无效元素,导致模型绑定失败,添加过滤逻辑:
result.map(function (element) { const cleanedName = element.replace(/[\u200B-\u200D\uFEFF]/g, '').trim(); if (cleanedName) { var cat = { 'Name': cleanedName }; arr.push(cat); } })
调整DataContract配置
若使用[DataContract],确保所有需绑定属性都标注[DataMember];也可尝试移除[DataContract]和[DataMember],避免与默认模型绑定器冲突。验证请求路径
检查Categoria/BulkPost是否为正确相对路径,通过浏览器开发者工具查看请求状态码与响应,确认请求是否到达目标方法。
内容的提问来源于stack exchange,提问作者Decoy
相关产品推荐
相关产品推荐

