我正在为我的反应项目做asp.net核心web api。而且我遇到了解析json POST请求的问题。 我的行动看起来像这样
[HttpPost]
public IActionResult Create([FromBody] RootObject request)
{
System.Diagnostics.Debug.WriteLine(request);
return null;
}
我正在传递这个张贴这个json
{
"survey": {
"questions": [{
"check": [null]
}],
"title": "dsfdf",
"date": "dfdsfs",
"notify": true
}
}
我的RootObject类看起来像这样
public class Question1
{
public List<string> check { get; set; }
public string title { get; set; }
public string description { get; set; }
}
public class RootObject
{
public List<Question1> questions { get; set; }
public string title { get; set; }
}
所以问题是请求总是为空。任何想法,如何解决它?
答案 0 :(得分:0)
JSON错了。 应该是
{
"questions": [{
"check": [null]
}],
"title": "dsfdf",
"date": "dfdsfs",
"notify": true
}
答案 1 :(得分:0)
您的JSON表示应该模仿您的C#对象表示(因为您正在使用模型绑定)
还要确保内容类型是正确的(application / json),以便使用正确的序列化程序。
因此:
public class RootObject {
[JsonProperty("questions")]
public List<Question> Questions {get;set;}
[JsonProperty("title")]
public string Title { get; set; }
[JsonProperty("description")]
public string Description { get; set; }
}
public class Question
{
[JsonProperty("check")]
public List<string> Check { get; set; }
}
请参阅https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding
答案 2 :(得分:0)
请参阅此示例。 https://code.msdn.microsoft.com/How-to-post-complex-JSON-d15bb765
这与您的方案相同。
模型
public class ItemGroup
{
public string Name { get; set; }
public IList<GroupItem> Items { get; set; }
}
public class GroupItem
{
public int Id { get; set; }
public string Name { get; set; }
}
前端
var sendJsonData = {
Name: "Group1",
Items: [
{
Id: 1,
Name: "Item1"
},
{
Id: 2,
Name: "Item2"
},
{
Id: 3,
Name: "Item3"
}
]
};
$.ajax({
url: "/Home/PostJson",
type: "POST",
contentType: "application/json",
data: JSON.stringify(sendJsonData),
success: function (data) {
}
});
控制器
public class HomeController : Controller
{
private static List<ItemGroup> _datas = new List<ItemGroup>();
public IActionResult Index()
{
return View(_datas);
}
[HttpPost]
public JsonResult PostJson([FromBody] ItemGroup data)
{
if (data != null)
{
_datas.Add(data);
}
return Json(new
{
state = 0,
msg = string.Empty
});
}
}