Мне интересно узнать, почему запрос $ .ajax () работает, но $. post () возвращает только пустой массив на контроллере.

Контроллер

[Route("api/actuary/{actuaryId:long}/documents/")]
[HttpPost]
public async Task<IHttpActionResult> uploadCourseTrainingProofAsync(List<CourseModel> courseAttended)
{
    //code .....
}

Этот запрос работает

$.ajax({
    url: url,
    cache: false,
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify(courseAttended),
    dataType: "json",
    success: function (data) {
        console.log(data)
    }
})

Но этот не работает, массив courseAttended на контроллере пуст.

$.post(url, JSON.stringify(courseAttended), function (response) {
    console.log(response)
},"json")
0
Tiisetso Tjabane 22 Окт 2018 в 12:56

2 ответа

Лучший ответ

$.post() использует значение по умолчанию contentType: 'application/x-www-form-urlencoded; charset=UTF-8', но вы используете contentType: 'application/json; charset=utf-8', с строковыми данными в своем методе $.ajax().

Если бы вы использовали $.post(), вам нужно было бы сгенерировать данные с помощью индексаторов коллекции, чтобы соответствовать вашему параметру List<CourseModel>, например

var data =  { [0].SomeProperty: SomeValue, [0].AnotherProperty: AnotherValue, [1].SomeProperty: SomeValue, .... };
$.post(url, data , function (response) {
    ....
});
0
user3559349user3559349 22 Окт 2018 в 10:02

Вам не нужно преобразовывать свой объект в $ .post

 $.post(url, courseAttended, function (response) {
        console.log(response)
    },"json")
0
CodeHacker 22 Окт 2018 в 10:07
52926629