.NET核心javascript到控制器POST
我不确定哪里出了问题,我有一个对象无法发布到我的控制器 型号:.NET核心javascript到控制器POST,javascript,c#,asp.net-core,Javascript,C#,Asp.net Core,我不确定哪里出了问题,我有一个对象无法发布到我的控制器 型号: 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; se
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; }
}
当我闯入控制器时,PostJsonModel
的“Things”计数为0。
看看chrome中的网络输出,allSaveElements
正是我所期望的
这在.NETFramework(4.7)应用程序中工作得非常好,但由于某些原因,.NETCore(2.2)中没有
我显然遗漏了什么,有人能指出吗?我想你需要在参数前面加上[FromBody]
[HttpPost]
公共异步任务DoSomething([FromBody]PostJsonModel测试)
{
...
}
您绑定到一个复杂对象,并从主体传递数据,在这种情况下,您需要使用FromBody
这在.NETFramework(4.7)应用程序中工作得非常好,但是
由于某些原因,不在.NET核心(2.2)中
你是对的,大约一年前我在过渡到.NETCore2.1时就注意到了这一点。在.NETFramework中,如果只为复杂对象发送一个参数,则不需要使用FromBody,但在.NETCore中,则需要使用它
您可能希望查看Microsoft提供的以下链接:
引用同一链接
如果默认行为没有给出正确的结果,可以使用
以下属性之一,用于指定要用于任何
给定目标
[FromQuery]-从查询字符串中获取值
[FromRoute]-从路由数据获取值
[FromForm]-从发布的表单字段获取值
[FromBody]-从请求正文获取值
[FromHeader]-从HTTP头获取值
您是否尝试在action参数之前使用[FromBody]属性?我认为您需要将[FromBody]放在参数
公共异步任务DoSomething([FromBody]PostJsonModel test)
之前使用XMLHttpRequest是否有原因?JQuery Ajax帖子可能是一个更好的选择。@GaryStewart此项目不使用JQuery。我们在过去遇到过一些问题,所以我们尝试在没有它的情况下完成这个项目。感谢大纲和文档,它真的很有帮助。我不得不说,我对这件事感到很尴尬。你不必感到尴尬,我已经去过了。很高兴知道它帮助了你:)
[HttpPost]
public async Task<IActionResult> DoSomething(PostJsonModel test)
{
//Save to the database
return Json("Success");
}
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);