【发布时间】:2019-12-31 20:38:27
【问题描述】:
不知道哪里出错了,我有一个对象不会发布到我的控制器。
型号:
public class PostJsonModel
{
public List<JsonModel> Things { get; set; }
}
public class JsonModel
{
public int Id { get; set; }
public string Tests { get; set; }
public string MoreTests { get; set; }
}
控制器:
[HttpPost]
public async Task<IActionResult> DoSomething(PostJsonModel test)
{
//Save to the database
return Json("Success");
}
javascript:
var test = {
"Id": 5,
"Tests": "Testing",
"MoreTests": "More More More"
};
var more = [];
more.push(test);
more.push(test);
more.push(test);
var allSaveElements = {
"Things": more
};
let xhr = new XMLHttpRequest();
xhr.open('POST', '/Home/DoSomething', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onload = function () {
if (xhr.status === 200) {
//Do something
}
else {
alert('Request failed. Returned status of ' + xhr.status);
}
};
xhr.send(allSaveElements);
当我闯入控制器时,PostJsonModel 的“事物”计数为 0。
查看 chrome 中的网络输出,allSaveElements 正是我所期望的。
这在 .NET Framework (4.7) 应用程序中工作得非常好,但由于某种原因在 .NET Core (2.2) 中却没有
我显然遗漏了一些东西,有人可以指出吗?
【问题讨论】:
-
你试过在action参数前使用[FromBody]属性吗?
-
我认为您需要将 [FromBody] 放在参数
public async Task<IActionResult> DoSomething([FromBody] PostJsonModel test)之前 -
您使用 XMLHttpRequest 是有原因的吗? JQuery Ajax 帖子可能是更好的选择。
-
@GaryStewart 我们没有在这个项目中使用 jQuery。过去我们遇到过一些问题,所以我们试图在没有它的情况下完成这个项目。
标签: javascript c# asp.net-core