Как я уже писал в комментарии, удаление contentType
, dataType
и JSON.stringify
решает вашу проблему. Таким образом, запрос генерируется с помощью Content-Type: application/x-www-form-urlencoded; charset=UTF-8
, а параметры формируются как Student%5BId%5D=1&Student%5BStudentName%5D=2&Student%5BAge%5D=3
.
. Проблема, с которой я сам борюсь, заключается в том, почему [FromBody]
не работает в ядре asp. net. 3 MVC контроллер. То, как я делаю это там, где мне нужно получить JSON
, выглядит примерно так:
[HttpPost]
public ActionResult EditStudent()
{
using (var bodyStreamReader = new System.IO.StreamReader(Request.Body)) {
var bodyText = await bodyStreamReader.ReadToEndAsync();
var student = JsonConvert.DeserializeObject<Student>(bodyText);
//do something
}
}
Если вы измените свое действие следующим образом, я думаю, что вы получите объект student
из ajax Звоните, вы написали в OP.
Обновление
Я выяснил, почему [FromBody]
не работает для меня. У меня было несколько примитивных типов в качестве аргументов. Когда я переключил их с одной моделью, он работал отлично.
В OP ajax должно быть как
$.ajax({
url: '/Controller/EditStudent',
contentType: "application/json; charset=utf-8",
type: 'POST',
data: JSON.stringify(object),
success: function (data) {
debugger;
},
error: function (data) {
debugger;
}
});
И C# код будет похож на
[HttpPost]
public ActionResult EditStudent([FromBody]Student student)
{
//do something
}