当我尝试向控制器发送 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"
},
...
]
我已经尝试了在其他类似问题中看到的所有解决方案,但似乎没有一个对我有用:(。希望你能帮助我。
当我尝试将 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] 属性并按预期工作,如下所示:
注意:如果您想了解更多详情,请参考此官方文档。